これは、2 つのテスト テーブルの sqlfiddle です: http://sqlfiddle.com/#!9/33361/3
tl;dr: SQL クエリに値!= 0
が含まれないのはなぜですか?NULL
私は2つのテーブルをLEFT JOINしています。NULL
intableB.field1
または1
inを持つ行を表示したいのですが、 inを持つ行tableB.field1
はすべて除外します。0
tableB.field1
このクエリ (例 6) でこの結果が得られると思いますが、null レコードは取得されません。
SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0;
この長いクエリを使用する必要があります (例 4):
SELECT * FROM tableA a
LEFT JOIN tableB b ON a.id = b.join_id
WHERE
b.field1 != 0 OR b.field1 IS NULL;
何よりも興味深いのは、MySQL が NULL を != 0 と見なさないのはなぜですか?
条件を ON 句に移動すると、予期しない行が表示されます。
mysql> SELECT * FROM tableA a
-> LEFT JOIN tableB b ON a.id = b.join_id AND b.field1 != 0;
+------+--------+--------+---------+--------+--------+
| id | field1 | field2 | join_id | field1 | field2 |
+------+--------+--------+---------+--------+--------+
| 1 | testA1 | testA1 | 1 | 1 | testB1 |
| 2 | testA2 | testA2 | NULL | NULL | NULL |
| 3 | testA3 | testA3 | NULL | NULL | NULL |
+------+--------+--------+---------+--------+--------+
3 rows in set (0.00 sec)