【问题标题】:filter ids by comma separated nvchar ids按逗号分隔的 nvarchar id 过滤 id
【发布时间】:2019-09-05 05:15:11
【问题描述】:

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

我已经尝试过如下:

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

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

【问题讨论】:

  • select * from DemoTable where Id not in (2,5,6)
  • “请注意输出也应该和输入格式一样,即逗号分隔的格式。”,应该是“1,2,3”吧?

标签: sql


【解决方案1】:

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

实际上,您有一个 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

【讨论】:

  • 你很接近,但我只想输出那些从我提供的列表 2、5、6 中唯一的 id。假设如果 5 存在,那么它将只返回 2,6 类似的东西
  • 你是SQL之王!非常感谢我亲爱的兄弟。作品
【解决方案2】:

这是您的查询。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多