0
select art.artno, art.name  from Art 
left outer join store on art.artno =store.artno  
where art.Artno not in (select art.artno from store)

クエリはこのようになっているはずですが、機能していないようです(列名の横に結果行が表示されません)。MSSQL2008を使用します。

table art             table store                 EXPECTED RESULT 
artno   name          artno qty                  artno   name 
    1    xbox360          1   1                      2     XHW
    2    XHW              3   2                      5     PS2
    3    NETANDO          4   1
    5    PS2              6   3
    6    PS1 
    4    X1

例に示されているExpectedoutを取得するためのクエリを作成するにはどうすればよいですか?

役立つ場合は、テーブルが100以上のK行の大きさであることをお知らせします。

最後に、上記のコードが機能しない理由についてのいくつかのライトが有益です。私はこれを見ましたこのリンクは外部結合が機能しなければならないようです、私はこれをまったく理解できなかったかもしれません。

私も試してみましfull outer joinたが、役に立ちませんでした。を使用して、except私はちょうど見つけることができましたが、私はカラム artnoを作成することができませんでした。name

4

3 に答える 3

1

別のアプローチは

select
  a.`artno`,
  a.`name`
from
  art a
left join
  store s on s.artno=a.artno
where
  s.artno is null

大きなテーブルでは、2番目のアプローチの方がおそらく良いでしょう。

于 2012-08-08T11:43:03.693 に答える
0
select art.artno, art.name from art
where art.artno not in (select store.artno from store)

(select store.artno from store)内部クエリ(この場合)を使用するために、いかなる種類の結合も行う必要はありません。内部クエリは、一時テーブルを作成し、値を入力して、クエリで使用するようなものです。

内側のクエリですべてartnoをテーブルに表示したいので、テーブルの内容を考慮せずに外側のクエリからを選択すると思うので、ではなくをstore使用する必要があります。(select store.artno from store)(select art.artno from store)art.artnostore

于 2012-08-08T11:42:53.740 に答える
0

Georgesの回答は機能しますが、そのサイズのテーブルでは、「存在しない」を含む相関サブクエリの方が高速になります。

テストしたところ、私のサブクエリは左外側よりも遅かった。それは前進の道です

于 2012-08-08T11:44:50.120 に答える