2017-12-14 14 views
2

나는 값의 목록을 가지고 있으며, 값의 각 행에 대해 "or"를 수행하거나 테이블에 추가하고 테이블을 쿼리 할 필요가 없다고 상기 목록에 의해 쿼리 할 수 ​​있는지 궁금합니다. 약 할)DB2 SQL - 값의 각 행에 "or"를 사용하지 않고 값 목록을 쿼리 할 수 ​​있습니까?

예를 들어, 내 목록은;

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

운영 체제가 실행은 당신의 Db2 서버? (Z/OS, OS/400, Linux/Unix/Windows). 구문은 다양 할 수 있습니다. – mao

+0

좋은 점은 언급 했어야합니다. - iSeries (OS/400) 버전에서 실행 중입니다. V6R1M0 – RDKells

답변

3

아래의 구문을 시도 난 용 DB2의 확실하지 (이것은 DB2 LUW의 V11에 유효) : 비 LUW 용 DB2에 대한

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') 
     ); 
+0

치료를했는데 삽입물이 아닌 다른 값을 사용할 수 있다는 것을 깨닫지 못했습니다. 감사합니다. – RDKells

0

Altenate 솔루션 :

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)