1

如果我需要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

萨克斯

4

2 回答 2

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 演示中看到它。

tab3 上的内部连接检查 tab3 中的条目是否存在,左连接 / 为 null 您确保 tab2 中的条目不存在。在大多数情况下,连接比子查询/IN()/EXISTS() 提供更好的性能。

于 2013-08-07T10:55:08.420 回答
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);

演示在这里

于 2013-08-07T10:55:32.393 回答