列出子查询列

时间:2013-08-07 05:29:18

标签: sql ms-access-2007

如果我需要在输出中列出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

2 个答案:

答案 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