我有一个值列表,我想知道是否可以通过所述列表进行查询,而不是必须为每行值执行“或”,或者将它们添加到表中并查询表(就像我'我要做什么)
比方说,我的清单是;
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会检索它,但它不在我的列表中。
答案 0 :(得分:6)
尝试以下语法(在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')
);
答案 1 :(得分:0)
替代非LUW DB2的解决方案:
In [182]: d = {"banana": "nanica"}
In [183]: FruitClass = asset_class_factory("FruitClass", d)
In [184]: f = FruitClass()
In [185]: f.banana
Out[185]: 'nanica'
In [186]: f
Out[186]: FruitClass(**{'banana': 'nanica'}