用逗号分隔的nvchar ID过滤ID

时间:2019-09-05 05:15:11

标签: sql

想象我有一个简单的表,其中包含Id(主键)和Name行。 现在,我有一个逗号分隔的ID列表,例如-2,5,6。我只想使用这些逗号分隔的ID,然后将每个ID与现有数据进行比较。并且仅返回那些唯一的ID,这意味着数据库中不存在。请注意,输出也应与输入格式相同,即以逗号分隔的格式。我正在使用Microsoft SQL Server 2017

我已经尝试过的方法如下:

select * from DemoTable where Id 2,5,6 not in DemoTable

但这似乎是不正确的语法。我该如何解决?

2 个答案:

答案 0 :(得分:2)

您可以使用它。您需要从另一侧看这个问题。我觉得这很有趣。

实际上,您有一个ID列表作为基础,并且您想从表中未包含的字符串中排除ID。因此,首先我们需要找到ID的列表,然后将其从表的ID中排除,以获得所需的结果。最后,您可以使用stuffstring_agg将最终结果转换为,分隔的字符串。

select Value from (
select value from string_split('1,2,3',',')) as t 
where t.value not in (select id from demotable)

您可以检查此链接是否有效。FIDDLE

答案 1 :(得分:0)

这是您的查询。

select string_agg(val, ',') as result
from (
    select value as val from string_split('1,2,3',',')) as t 
where t.val not in (select id from tableA)

结果:(逗号分隔)

1,2,3