DB2 SQL - 可以在不对每行值使用 "or" 的情况下查询值列表吗?

DB2 SQL - Possible to query a list of values without using "or" for each row of values?

我有一个值列表,我想知道是否可以通过所述列表进行查询,而不必为每一行值执行 "or" 或将它们添加到 table并查询 table(正如我即将做的)

比如说,我的清单是;

010, 46793, '329', '10'
011, 46798, '322', '12'
012, 33333, '111', '14'

我想这样查询;

SELECT VALUE1, VALUE2, VALUE3
  FROM MYTABLE
 WHERE (VALUEW VALUEX, VALUEY, VALUEZ) in(
        (010, 46793, '329', '10'),
        (011, 46798, '322', '12'),
        (012, 33333, '111', '14'))

(语法失败)

而不是必须做;

SELECT VALUE1, VALUE2, VALUE3
  FROM MYTABLE
 WHERE (VALUEW VALUEX, VALUEY, VALUEZ) = (010, 46793, '329', '10')
    OR (VALUEW VALUEX, VALUEY, VALUEZ) = (011, 46798, '322', '12')
    OR (VALUEW VALUEX, VALUEY, VALUEZ) = (012, 33333, '111', '14')

请注意类似;

SELECT VALUE1, VALUE2, VALUE3
  FROM MYTABLE
 WHERE VALUEW IN(010, 011, 012)
   AND VALUEX IN(46793, 46798, 33333) 
   AND VALUEY IN('329', '322', '111')
   AND VALUEZ IN('10', '12', '14')

在这种情况下将不起作用。

例如,如果以下值存在于 "MYTABLE";

011, 33333, '329', '10'

前面提到的 SQL 会检索它,但它不在我的列表中。

尝试下面的语法(它在 Db2 LUW v11 上有效)不确定 Db2 for i:

SELECT VALUE1, VALUE2, VALUE3
FROM  MYTABLE
where (VALUEW, VALUEX, VALUEY, VALUEZ) in ( values
        (010, 46793, '329', '10'),
        (011, 46798, '322', '12'),
        (012, 33333, '111', '14')
        );

非 LUW DB2 的替代解决方案:

WITH mylist(w,x,y,z) AS (
SELECT  010, 46793, '329', '10' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT  011, 46798, '322', '12' FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT  012, 33333, '111', '14' FROM SYSIBM.SYSDUMMY1 
)
SELECT VALUE1, VALUE2, VALUE3
FROM MYTABLE
INNER JOIN mylist
ON (VALUEW, VALUEX, VALUEY, VALUEZ)=(w,x,y,z)

我有一个 non-LUW DB2 的替代解决方案,它使用了 XMLTABLE 函数。这比 SYSDUMMY1 UNION ALL 方法允许更多的行。

SELECT TEST_NM, ITM_CD
FROM XMLTABLE('$doc/xml/node'
    PASSING XMLPARSE('<xml>
        <node test-nm="ABC 123" itm-cd="215" />
        <node test-nm="DEF 345" itm-cd="151" />
        <node test-nm="GHI 678" itm-cd="412" />
        <node test-nm="JKL 901" itm-cd="410" />
        <node test-nm="MNO 234" itm-cd="875" />
        <node test-nm="PQR 567" itm-cd="249" />
        <node test-nm="STU 890" itm-cd="817" />
    </xml>') AS "doc"
    COLUMNS TEST_NM VARCHAR(30) PATH '@test-nm',
        ITM_CD INTEGER PATH '@itm-cd') AS Q;