DB2 SQL - 可以查询值列表而不对每行值使用“或”?

时间:2017-12-14 15:58:48

标签: sql db2 ibm-midrange db2-400

我有一个值列表,我想知道是否可以通过所述列表进行查询,而不是必须为每行值执行“或”,或者将它们添加到表中并查询表(就像我'我要做什么)

比方说,我的清单是;

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会检索它,但它不在我的列表中。

2 个答案:

答案 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'}