ホームページ > データベース > mysql チュートリアル > MySQL LEFT JOIN がすべての行を返さないのはなぜですか?

MySQL LEFT JOIN がすべての行を返さないのはなぜですか?

Barbara Streisand
リリース: 2024-12-22 13:22:14
オリジナル
920 人が閲覧しました

Why Doesn't My MySQL LEFT JOIN Return All Rows?

左結合ですべての行が返されない: MySQL クエリの問題

MySQL では、2 つのテーブルの行を結合するために LEFT JOIN 操作がよく使用されます。共通鍵に基づいています。ただし、この質問で説明されているような特定のシナリオでは、クエリが予期したすべての行を返さない場合があります。

クエリの構造と問題

問題は、WHERE が存在する場合に発生します。元のクエリに見られるように、句は結合条件に直接適用されます:

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
ログイン後にコピー

この場合、WHERE 句はpr7.field = 23 の行のみを返すように結合を制限します。その結果、値 23 を持つ一致する pr7.field エントリを持たない jos_hp_properties テーブルの行が除外されます。これにより、クエリが返す行の数が少なくなります。

解決策: WHERE を移動する条件

問題を解決し、最初のテーブルのすべての行が確実に返されるようにするには、次のように WHERE 条件を JOIN の ON 条件に移動する必要があります。

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 に移動することにより、クエリはまずテーブル間の左結合を確立し、次に指定された基準に基づいて結合された行をフィルター処理します。これにより、jos_hp_properties2 テーブルに pr7.field = 23 の一致するエントリがあるかどうかに関係なく、jos_hp_properties テーブルのすべての行が結果セットに含まれるようになります。

以上がMySQL LEFT JOIN がすべての行を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート