2017-12-01 5 views
0

:DB2 - 나는 현재 다음 표와 DB2에 문제가 부질

Table_1 
A  B  C 
1  2  1 
2  1  2 
3  2  2 
4  1  1 

Table_2 
A 
1 

나는 table_2에서 가장 큰 A보다 B 또는 C 큰 모든 table_1 기록을 선택합니다. 그 결과는 다음과 같아야합니다

Query 
A  B  C 
1  2  1 
2  1  2 
3  2  2 

나는 현재이 쿼리 달성하는 :

select A, B, C 
from Table_1 
where B > (select max(A) from Table_2) 
or C > (select max(A) from Table_2) 

은 성능 향상을 위해 WHERE 절에 유일한 문제는 하나 개의 부속 선택 할 수 있습니까?

+0

가망 쓸 수있다'<임의 (B, C) '(최대 Table_2 행 (A)을 선택). DB2를 사용하지 않으므로 테스트 할 수 없습니다. –

답변

0

그것은 당신이 필요, 다음 FROM 절에 서브 쿼리를 이동하는 경우 :

select t1.A, t1.B, t1.C 
from Table_1 t1 cross join 
    (select max(A) as maxA from table_2) t2 
where t1.B > t2.maxA or t1.C > t2.maxA; 
0

생각해 반대 : 당신은 하지 위대한는 A에 함께 표 2 기록을 존재하는 모든 표 기록을 원하는 값 :

select * 
from table_1 
where not exists 
(
    select * 
    from table_2 
    where table_2.a >= table_1.b 
    and table_2.a >= table_1.c 
); 

덧붙여서 : 단 하나의 하위 쿼리 만 있으면 유지 관리가 가능합니다. 변경은 한 곳에서만 이루어져야합니다. 속도에 관해서는 : 쿼리에서 하위 쿼리는 주 쿼리와 상관 관계가 없으므로 아마도 한 번 실행되고 결과는 모든 검사에 적용됩니다. (그것은 바보 같은 것의 DBMS가 된 table_1의 각 레코드와 컬럼에 대해 또 다시 같은 하위 쿼리를 실행 않았다.)와 같은 내가 작성합니다

1

: 나는 더 DB2가 없습니다 안된 같이

select A, B, C 
from Table_1 
where MAX(B,C) > (select max(A) from Table_2) 

주 데이터베이스 편리.

여기가 MySQL의 구문에 SQLfiddle이다 : http://sqlfiddle.com/#!9/2f89c5/3

+0

좋은 생각입니다. –