【问题标题】:Why do I get an error when I select multiple values across multiple columns using IN but not when using = operator?为什么当我使用 IN 在多个列中选择多个值时会出现错误,而在使用 = 运算符时却不会?
【发布时间】:2023-01-18 20:44:12
【问题描述】:

我想根据我在 3 列中指定的值从我的表中获取特定的数据子集。

以下 SQL 返回预期结果(但表中只有 1 条记录)。

SELECT *
FROM myTable
WHERE (col1, col2, col3) = (value1, value2, value3);

结果示例:

Column 1 Column 2 Column 3 Column 4
value 1 value 2 value 3 value 4

现在我想要做的就是从表中返回多条记录,其中包含 col1、2 和 3 的指定值。

我将上面的查询更改如下:

SELECT *
FROM myTable
WHERE (col1, col2, col3) IN ((value1, value2, value3), (value5, value6, value7));

我期待从我的表中返回 2 行。我的预期结果的一个例子:

Column 1 Column 2 Column 3 Column 4
value 1 value 2 value 3 value 4
value 5 value 6 value 7 value 8

但是我的查询给了我以下错误:SQL 错误 [42601]:[SQL0104] 标记“value1”无效。有效标记:(.

请帮助正确的语法。

【问题讨论】:

  • 您的语法很好,SQL 标准可选功能。但似乎 DB2 不支持它。

标签: sql db2


【解决方案1】:

我会尝试:

SELECT *
FROM myTable
WHERE (col1, col2, col3) IN (value1, value2, value3)
   OR (col1, col2, col3) IN (value5, value6, value7);

这个没有使用(可选)功能“T051,行类型”

【讨论】:

    【解决方案2】:

    当您有多行代码时,您必须在它前面加上 values 关键字,如下所示

    SELECT *
      FROM myTable
     WHERE (col1, col2, col3) IN (
      values (value1, value2, value3), (value5, value6, value7)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2020-11-19
      • 2020-09-07
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多