我有一个值列表,我想知道是否可以通过所述列表进行查询,而不是必须对每一行值执行“或”或将它们添加到表中并查询表(因为我'我正要去做)
比如说,我的 list 是;
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')
);
关于sql - DB2 SQL - 可以在不对每行值使用 "or"的情况下查询值列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47817504/