2012-02-16 4 views
2

テーブルAとテーブルBの2つのテーブルがあります。テーブルAのカラムに存在しない値を見つけようとしています。テーブルBの列に一致する私の現在のコードは次のとおりです。SQLでは、他のテーブルに存在しないすべてのエントリを検索します

SELECT A.x 
FROM A 
WHERE A.x NOT IN (SELECT B.x FROM B); 
私も試してみました

SELECT A.x 
FROM A 
WHERE EXISTS NOT (SELECT B.x FROM B); 

しかし、私は、クエリを実行すると、何も私はそこにあるという事実を知って、表にではありませんBの "x"列にはないが表示されないAの "x"列の値。

、私は非常に間抜けな何かをやって、または明らかに明白な答えを欠けている感がありますが、私は疲れにだと私はもう気にして長い間のためにこれに取り組んできた任意の助け歓声ので、 =)

+1

これらのテーブルの間に一致フィールドがありますか?はいの場合は、LEFT JOINを実行できます。 – Juanma

+2

あなたは '存在しない'ではなく '存在しない 'という意味ですか? –

+0

最初のクエリが機能するはずです。 2番目のものは 'WHERE'がありません(おそらく' EXISTS NOT'は私が気づいていないMS Access特有のものでない限り構文的には間違いでしょう)。 –

答えて

4

OUTER JOINをお試しいただきましたか?

SELECT A.x 
FROM A LEFT OUTER JOIN B ON A.x = B.x 
WHERE B.x IS NULL 
+0

私は今それを試してみます –

+0

甘い、それは働いているようです –

2

B.xにはnullの値がありますか?省略形です

a.x not in (1, 2, 3, null, ...) 

:もしそうなら、not inは以下のように読み込むanything <> nullunknownと評価されているので

a.x <> 1 and a.x <> 2 and a.x <> 3 and a.x <> null and ... 

not in条件が真なることはありません。結果は空の行セットになります。経験豊富なSQL開発者でさえ驚かされる3つの価値あるロジックの不快な副作用です。 the Wikidia article on three-valued logicを参照してください詳細については、

SELECT x FROM A WHERE x NOT IN (SELECT x FROM B where x is not null) 

一つの解決策は次のように、null値を除外することです。

+0

いいえ、私が見ることができるヌルエントリはありません –

+0

私はそこに賭けています。ただ試してみてください: 'SELECT x FROM B WHERE xがNULLです' –

関連する問題