2014-11-28 3 views
0

여기 내 샘플 문제에 대해 설명합니다.유니온 쿼리 최적화 모두

테이블 이름 ledg,bill,vocu

Ledg 

    id 
    name 

bill 
    id 
    amt 

vouc 

    id 
    amt 

여기에 내가 AMT는 빌과 vouc에서 제로보다 큰 이름을 선택합니다. 그러나 청구서와 vouc에는 동일한 ID가 없습니다. 그리고 저는 Amt가 0보다 큰 것을 보여주고 싶습니다.

그래서 내가 올바르게

select * 
from ledg g inner join vouc v on v.id=g.id 

union all 

select * 
from ledg g inner join bill b on b.id=g.id 

그 작업을 같이 했어요. 단일 쿼리 또는 유효한 쿼리에서 동일한 결과를 얻을 수 있습니까?

SAMPLE

insert into ledg(id,name) values(1,'aa'), 
(2,'bb'), 
(3,'cc'); 


insert into bill(id,amt) values(1,10),(2,-10); 

insert into vouc(id,amt) values(3,30); 

OUTPUT

NAME Amt 

aa 10 
cc 30 
+0

샘플 데이터와 원하는 결과를 제공 할 수 있습니까? 귀하의 질문은 0보다 큰 금액에 대한 것으로 보이지만 귀하가 말하는 쿼리에는 그러한 비교가 없습니다. –

답변

1

당신이 값이 다른 두 테이블보다 큰 0ledg 행을 원한다면, 당신은 할 수 :

select g.* 
from ledg g 
where exists (select 1 from vouc v where v.id = l.id and v.amt > 0) and 
     exists (select 1 from bill b where b.id = l.id and b.amt > 0); 

이것은의 인덱스를 잘 활용할 수 있습니다.열은 vouc이고 bill입니다.

+0

귀중한 시간을 가져 주셔서 감사합니다. 단일 쿼리에서 동일한 결과를 얻을 수 있습니까? 것이 가능하다? – Sathish

+0

@Sathish. . . 이것은 단일 쿼리입니다. 무슨 뜻인지 모르겠다. –

+0

나는 하나의 select query sir을 의미한다. – Sathish