2013-09-03 3 views
0

를 (1 절은 아무런 결과가없는 경우에만 2 절을 실행) 내가 할 경우 :단락 UNION?

SELECT * FROM A 
WHERE conditions 
UNION 
SELECT * FROM B 
WHERE conditions 

나는

인가 B.

의 쿼리의 결과 집합의 쿼리의 결과 집합의 합집합을 얻을 방법/연산자 그래서 내가 단락 회로 OR 결과를 얻을 수 있습니까?

e.e. SELECT * FROM A WHERE conditions의 결과와 의 결과가 인 경우이 결과가 반환되지 않으면 SELECT * FROM B WHERE conditions의 결과가 표시됩니까?

답변

2

짧은 대답이 '아니오',하지만 두 번째 쿼리를 피할 수 있지만, 첫 번째 다시 실행해야합니다

SELECT * FROM A 
WHERE conditions 
UNION 
SELECT * FROM B 
WHERE NOT EXISTS (
    SELECT * FROM A 
    WHERE conditions) 
AND conditions 

이것은 옵티마이 도와 준다 가정 및 단락에게 두 번째 쿼리 때문에를 NOT EXISTS의 결과는 모든 행에 대해 거짓입니다.

첫 번째 쿼리가 두 번째 쿼리보다 훨씬 저렴하면 첫 번째 행이 행을 반환하면 성능이 향상 될 수 있습니다.

0

'If'문을 사용해 보셨습니까?

If(select Count(*) from A where conditions) > 0 
Then Select * from A where conditions 
Else Select * from B where conditions 
1

당신은 같은 단일 SQL 쿼리와 함께이 작업을 수행 할 수 있습니다

SELECT * 
FROM A 
WHERE conditions 
UNION ALL 
SELECT * 
FROM B 
WHERE conditions and not exists (select * from A where conditions);