【问题标题】:MS-SQL In statementMS-SQL In 语句
【发布时间】:2009-06-03 02:02:12
【问题描述】:
Select a, b, c from table where a in (1, 2, 3)

如果列表在列中怎么办?

我试试这个会报错:

Select a, b, c from a in b

抱歉,我的问题没有弄清楚。

这与 joinin (select b from table)

无关

b列类型为nvarchar,数据为列表,像这样'1,2,5'

类型是 int 的列。

【问题讨论】:

  • 您的问题不清楚。你的桌子是什么?他们的专栏是什么?您无法实现的查询的预期结果是什么?

标签: sql sql-server


【解决方案1】:

看完你的问题,这就是你想要的:

SELECT
    a,b,c
FROM
    tblA
WHERE
    b LIKE CAST(a as nvarchar) + ',%'
    OR b LIKE '%,' + CAST(a as nvarchar) + ',%'
    OR b LIKE '%,' + CAST(a as nvarchar)

应该可以的。

【讨论】:

  • 不,不会。注意逗号的位置。已经涵盖了。嘘。
【解决方案2】:

许多答案都指向了正确的方向,但我认为这个真的会奏效:

SELECT a, b, c
FROM table
WHERE ',' + b + ',' LIKE '%,' + CAST(a as varchar) + ',%'

您可以通过强制 B 以逗号开头和结尾来加快此操作。或者更好的是,规范化数据库并将列 B 移动到具有一对多关系的自己的表中。

【讨论】:

    【解决方案3】:

    在 SQL 中,列通常是所谓的“标量”数据类型之一:数字、日期/时间、字符串——参见例如MSDN。如果您更好地解释在什么意义上您在列b 中获得了“列表”,以及如何,例如向我们展示CREATE TABLE a 声明,我们或许可以为您提供更好的帮助!

    【讨论】:

      【解决方案4】:

      Need SQL Query Help, matching a stored procedure list parameter against individual columns。它展示了如何编写一个 UDF,它将获取您的“列表”列并返回一个表,您可以使用该表来连接您从中选择的那个。

      【讨论】:

        【解决方案5】:

        我想你想加入表格?

        SELECT a, b, c
        FROM a
        JOIN b ON a.ID=b.ID
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-27
          • 2012-04-25
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多