db2 为什么使用IN在多列中选择多个值时会出现错误,而使用=运算符时则不会出现错误?

rmbxnbpk  于 2023-01-20  发布在  DB2
关注(0)|答案(3)|浏览(163)

我希望根据在3列中指定的值从表中获取特定的数据子集。
下面的SQL返回了预期的结果(但只有表中的1条记录)。

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

结果示例:
| 第1栏|第2栏|第3栏|第4栏|
| - ------|- ------|- ------|- ------|
| 值1|值2|值3|值4|
现在我要做的就是从表中返回多个记录,并为col1、2和3指定值。
我将上述查询更改如下:

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

我期望从表中返回2行。期望结果的示例:
| 第1栏|第2栏|第3栏|第4栏|
| - ------|- ------|- ------|- ------|
| 值1|值2|值3|值4|
| 值5|值6|值7|值8|
但是查询出现以下错误:* SQL错误[42601]:[SQL0104]标记'value1'无效。有效标记:(.*
请帮助更正语法。

z5btuh9x

z5btuh9x1#

如果要对多行进行编码,则必须在前面加上values关键字,如下所示

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

goucqfw62#

我会试试:

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

此选项未使用(可选)功能“T051,行类型”

cgyqldqp

cgyqldqp3#

另一种选择:

SELECT DISTINCT t.*
FROM myTable t
JOIN ( VALUES (value1, value2, value3)
            , (value5, value6, value7) ) x (col1, col2, col3)
    USING (col1, col2, col3)

相关问题