ホームページ >データベース >mysql チュートリアル >MySQL LEFT JOIN クエリが予想よりも少ない行を返すのはなぜですか?
MySQL 左結合の Null 行の問題を解決する
MySQL では、左結合クエリを実行するときに、左側のテーブルのすべての行が返されるわけではないシナリオ。この問題は、結合条件が ON 句ではなく WHERE 句で指定されている場合に発生します。
テーブル jos_hp_properties (pr) と jos_hp_properties2 (pr7) を結合する次のクエリを考えてみましょう:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
ユーザーが述べたように、このクエリは、テーブルに 27 行あるにもかかわらず、最初のテーブルから 1 行だけを返します。 jos_hp_properties テーブル。この理由は、WHERE 条件 pr7.field=23 が、jos_hp_properties2 テーブル内に一致するフィールド値 23 を持たないすべての行を jos_hp_properties から除外するためです。
この問題を解決し、すべての行を jos_hp_properties から取得するには2 番目のテーブルの room_price_high 値 (一致するフィールドがない場合は NULL) を含む最初のテーブルの WHERE 条件は次のようになります。左結合の ON 節に移動します:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
ON 節に結合条件を置くと、左結合は jos_hp_properties テーブルのすべての行を保持し、それに基づいて jos_hp_properties2 テーブルのみをフィルターします。一致するフィールド値。これにより、2 番目のテーブルに対応する行がない場合でも、最初のテーブルのすべての行が返されるようになります。
以上がMySQL LEFT JOIN クエリが予想よりも少ない行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。