左結合ですべての行が返されない
元の質問:
左外部結合は、プライマリ テーブル内のすべての行ではなく、1 行のみを返します。結合条件には、セカンダリ テーブルのフィールドに対するフィルターが含まれます。フィールドがフィルター基準を満たすセカンダリ テーブルの値を含め、プライマリ テーブルのすべての行を選択するにはどうすればよいですか?
解決策:
問題の原因は次のとおりです。 JOIN の後に WHERE 条件を置きます。これを JOIN 句自体に移動することで、クエリは結合がフィルター条件を満たす行のみと一致することを保証します。変更されたクエリは次のとおりです。
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
このクエリでは、JOIN の後の別の WHERE 句に WHERE 条件が含まれなくなりました。代わりに、これが JOIN の ON 句に組み込まれ、pr7.field が 23 である行のみが結合されるようになりました。これにより、jos_hp_properties2 に一致しない行も含め、jos_hp_properties のすべての行を選択できるようになり、pr7.value に NULL 値が設定されます。
以上がMySQL LEFT JOIN がプライマリ テーブルのすべての行ではなく 1 行だけを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。