检查值是否在不同的表中

时间:2015-06-02 23:32:32

标签: sql sql-server sql-server-2008

所以我是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在字符串中的行。但我不知道如何合成这个。

感谢任何帮助

1 个答案:

答案 0 :(得分: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可能会返回多个值(例如位置)。如果您有这样的版本,则需要将额外的返回值包含为命名列。