cityId
というキーを持つテーブルを参照するテーブルがあります。 私はこのクエリを使用して、そこからデータをフェッチ:、このようカスタム関数を使用してヌル値をフィルタリングして左結合します。
SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId;
をcityId
がnullだった場合、それはcity.areaId
ためのNULLで、そのままテーブルを返します。
city.areaId
を使用しているwhere句に関数を追加すると、常にtrueの関数であっても、クエリではcityId
がnullの行は表示されません。たとえば、
SELECT t.ID, city.areaId FROM transp t
LEFT JOIN city ON city.ID = t.cityId
WHERE always_true(city.areaId);
nullのある行は表示されませんcityId
。私はleft join
を使用しているので、なぜこのようなことが起こるのか分かりません。SELECTに関数を入れると、実際には常に真であることがわかります。
がどのように見えるの回避策があるにしてもMySQLのバグ。 '1 = 1'のような' where'の式で正しく動作します。 –
sqlfiddleで1 = 1を使用して正しい動作へのリンクを送信できますか?私はそれを繰り返すことができなかった – smartDonkey
うん、この動作は非常に奇妙です。両方のレコードが表示されると思います。 MySQLのバグとしてそれを発生させ、MySQLの開発者が答えとして出てくるものを見る価値があります。 – Shadow