2015-06-02 35 views
2

所以我是SQL的新手,我對它幾乎沒有經驗。所以請原諒,如果這是非常基本的,但我似乎無法找到谷歌搜索後...檢查值是否在不同的表

所以我有一個表,其中包含一個serialnumber字段。 我有一個包含逗號分隔值的輸入字段,每個輸入字段都是一個序列號。我只想顯示用逗號分隔的字符串中的序列號。

所以我有,我可以使用它在這樣的逗號分割的字符串splitstring功能:

SELECT * FROM dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') 

這將返回一個表,每個SN是一排。

所以,我想是這樣的:

SELECT 
    * 
FROM 
    tbl_serials AS sn 
WHERE 
    sn.serialnumber in dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') 

所以在SERIALNUMBER是字符串內,這將只顯示行。但我不知道如何合成構造這個。

任何幫助表示讚賞

回答

4

一種方法來做到這一點是使用join

SELECT sn.* 
FROM tbl_serials sn JOIN 
    dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') as ss(val) 
    ON sn.serialnumber = ss.val; 

隨着你的路線,你需要一個子查詢:

SELECT sn.* 
FROM tbl_serials sn JOIN 
WHERE sn.serialnumber in (SELECT val 
          FROM dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') as ss(val) 
         ); 

在這兩種情況下, as ss(val)將表別名分配給該列的別名。某些版本的SplitString可能會返回多個值(例如位置)。如果你有這樣一個版本,那麼你需要包含額外的返回值作爲命名列。