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 demoでライブを参照してください。

tab3 の内部結合は、tab3 のエントリが存在することを確認し、左側の結合 / is 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 に答える