4

2つの列で2つのテーブルの外部結合を実行しています。table1.column1=table2.column1およびtable1.column2=table2.column2の場合、結合が発生するはずです。column2にはnullを含めることが許可されているため、nullはnullと等しくないため(コンピューター科学者のみがそれを気に入る可能性があります)、値がnullの場合は常に結合が失敗します。

私が思いついた回避策は次のとおりです。

select table1.column1,table1.colunn1,table2.column1,table2.column2 from 
table1 
left join table2 
       on table1.column1=table2.column1 
       and if(table1.column2 is null,table2.column2 is null, table1.column2=table2.column2)

これは正しく機能しますが、もっと良い方法があるはずですか?

4

3 に答える 3

9

MySQL のnull-safe 比較演算子 <=>を使用できます。

SELECT    t1.column1, t1.column2, t2.column1, t2.column2 
FROM      table1 t1
LEFT JOIN table2 t2 
       ON t1.column1 = t2.column1 AND t1.column2 <=> t2.column2
于 2012-07-19T17:45:44.833 に答える
3

私はそうするでしょうLEFT JOIN table2 ON table1.column1 = table2.column1 OR (table1.column1 IS NULL AND table2.column1 IS NULL)。それがうまくいくかどうかはわかりません。

(ちなみに、null は値ではありません。)

于 2012-07-19T17:47:00.273 に答える