テーブルAとテーブルBがあります。AとBを結合したいが、結合が不可能な場合のみ結果が必要です。私は試しましたSQL Joinは一致するものがない場合に結果を返します。
SELECT B.*
FROM A
RIGHT JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL
これは動作するはずですが、そうではありません。私のSQLは正しいですか?
テーブルAとテーブルBがあります。AとBを結合したいが、結合が不可能な場合のみ結果が必要です。私は試しましたSQL Joinは一致するものがない場合に結果を返します。
SELECT B.*
FROM A
RIGHT JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL
これは動作するはずですが、そうではありません。私のSQLは正しいですか?
あなたは「動作しませんでした」で何を意味するか言わなかったが、これらのクエリのいずれかの場合:
SELECT B.*
FROM A
RIGHT JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL
SELECT A.*
FROM A
LEFT JOIN B ON A.KEY = B.KEY
WHERE B.KEY IS NULL
リターン・ノーの結果は、それが固体のテーブル内のすべてのキーがと一致していることを意味します外部結合テーブルの少なくとも1つのキー
あなたが他に一致する行を持たないAまたはBのいずれかの行を見つけるためにしようとしている場合は、次のようなクエリ必要があります:あなたは、人々が言って、「しかし、A聞こえるかもしれません
SELECT A.*, B.*, CASE WHEN A.KEY IS NULL THEN 'in B but not A' WHEN B.KEY IS NULL THEN 'in B but not A' END as explanation
FROM A
FULL OUTER JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL OR B.KEY IS NULL
をキーは、/主キーがnullであることはできないため、nullになることはありません。 - はい、私たちは参加しています。彼らはテーブルのプライマリキーですが、参加が発生した後で必ずしもプライマリキーであるとは限りません。データベースは、キーが値と等しい行がBにない場合、Aからの実際の値でいっぱいの行とペアになったB(b.key列を含む)のNULL値でいっぱいの行を生成することができますa.keyの - これは、テーブルのキーがもはや結合のキーではなく、nullであることを意味します。
キー以外の列に対してヌルでテストできますか?はい。ただし、テーブルの他の列がNOT NULLABLEでない場合、キー列は、不一致の行を探している場合に使用するのに最適な列です。これは、2つのテーブルが結合されている状況でnullを含むことが保証できる唯一のカラムであり、このテーブルに他のテーブルと一致するデータがないからです。
もっと説明すると、 :
A
key|val
-------
000|hello
001|world
B
key|val
-------
000|hello
002|there
をもたらすであろう参加しましたAまたはBのいずれかのkey
列にNULLが含まれていると、その行は結合結果に表示されません。
これはありがとうございました! –
答えを見つけました。
これが機能しない理由は、JOINではAND条件を使用していたためで、WHERE句では使用されなかったためです。
ありがとうございます。
あなたは実際に*あなたが実行していたクエリではない "動作していない"クエリを投稿しましたか?お元気ですか... –
元のスニペットには「AND」状態さえありませんでしたか? – BenM
私はこれを簡単にして、人々が答えるのを簡単にしました。申し訳ありませんが可能なら削除します。 –
「ヌル」のキーにどのように参加できますか? – BenM
何が返されますか? –
NULL値を比較するために=を使用することはできないので、 'A.KEY = B.KEY'は' A.KEY'がヌルのときは機能しませんので、うまくいきません。 https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html – ADyson