如果我需要在输出中列出TAB3
列。我该怎么做
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 :(得分: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中的条目是否存在,左连接/为null,确保tab2中的条目不存在。大多数时候加入比子查询/ IN()/ EXISTS()更好的性能。
答案 1 :(得分:1)
你应该在内部加入tab1和tab3,并确保tab1中没有tab1.memno。
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。