2013-08-07 2 views
1

Если мне нужно указать TAB3 столбцы на выходе. Как это сделатьСписок Sub query Столбцы

select * 
    from tab2 T2 right join 
     tab1 T1 
     on T1.MemNo = T2.MemId 
    where exists (SELECT 1 
        FROM TAB3 x 
        WHERE x.Col1 = T1.SID AND x.Col2 = T2.SVID) and 
      T2.MemId IS NULL 

Примеры данных

Tab1 

MemNo SID 

116537 S110 
116537 D011 
575777 D012 
214438 S110 
434611 D114 
214438 D011 
208368 D012 
208368 S110 

TAB2 

MemID SVID 

116537 110 
116537 11 
214438 11 
434675 114 
214438 110 
575788 12 
208368 12 
208368 110 


TAB3 

Col1 Col2 

D011 11 
S110 110 
D114 114 
D012 12 

Ожидаемые результаты

MemNo Col2 

575777 12 
434611 114 

Thax

+0

Как насчет отображения выборочных данных и ожидаемого результата? – Noel

+0

@ Ramblin, добавлены данные примера. К сожалению, я пропустил это раньше – SMPH

+0

Итак, вы хотите получить эти memids из tab1, которых нет в tab2. А затем получите значение col2 из tab3. Верный? – Noel

ответ

1

Вы должны внутреннее соединение tab1 и tab3 и убедитесь, что tab1.memno отсутствует в tab2.

select tab1.memno, tab3.col2 
    from tab1 
inner join tab3 
    on tab1.sid = tab3.col1 
where not exists (select 1 from tab2 
        where tab2.memid = tab1.memno); 

Демо-версия here.

+0

Спасибо Ramblin, действительно оценен. – SMPH

3

проста:

select 
* 
from 
tab1 t1 
inner join tab3 t3 on t1.SID = t3.Col1 
left join tab2 t2 on t1.MemNo = t2.MemID 
where t2.MemID is null 

Он дает правильный результат. Смотрите его в sqlfiddle demo.

Внутреннее соединение на tab3 проверяет, что запись в tab3 существует, а левое соединение/является нулевым, вы убедитесь, что запись в tab2 этого не делает. В большинстве случаев совместное использование дает лучшую производительность, чем подзапросы/IN()/EXISTS().

+0

Спасибо, друг. Хороший материал – SMPH

+0

Как мы можем внести изменения в случае, если мы хотим узнать несогласованные или отсутствующие записи в 'TAB3' – SMPH

+0

Просто левым соединением и проверкой с ним является null. Вот отличное объяснение объединений: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – fancyPants