2017-03-03 10 views
1

私は2つのテーブルがあり、それぞれに3つのカラムがあります。Mysql join on null

table A 
c1 c2 c3 
10 NULL NULL 
10 NULL 1 
10 1 NULL 

table B 
c1 c2 c3 
10 NULL NULL 
10 NULL 1 
10 1 NULL 

私はNULLと一致する必要がありますので、

SELECT * FROM a JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3 

私はそれがNULLに参加したいと思い、NULL = NULLようにそれらを結合したいと思います。最後に私は3つのレコードを得ています:

table A+B 
c1 c2 c3 c1 c2 c3 
10 NULL NULL 10 NULL NULL 
10 NULL 1 10 NULL 1 
10 1 NULL 10 1 NULL 

どういうわけか? IFNULLでも試してみましたが、期待通りの結果を得られませんでした。あなたが私に正しい方向を向けることができれば、私は感謝しています。どうもありがとう!

答えて

2

NULL -safe等価演算子を使用します。

SELECT * 
FROM a JOIN 
    b 
    ON a.c1 <=> b.c1 AND a.c2 <=> b.c2 AND a.c3 <=> b.c3; 

は、しかし、あなたのサンプルデータで、最初の列にjoinが十分にある:

SELECT * 
FROM a JOIN 
    b 
    ON a.c1 = b.c1 ; 
+0

狂気、私は知らない、私はそれもやってみたけど、うまくいかなかった。今すぐ働きます。私は多分sqlyogがちょっとでもか何かバギーかと感じています。ところで、質問を更新して、c1だけに参加するだけでは不十分です。どうもありがとう! – user2511599

+0

ゴードン・リノフ...! SQLの質問に常に最初に答えてくれました。新しいやり方を教えてくれる良い答えをくれてありがとう。 –