ホームページ > データベース > mysql チュートリアル > MySQL LEFT JOIN クエリが予想よりも少ない行を返すのはなぜですか?

MySQL LEFT JOIN クエリが予想よりも少ない行を返すのはなぜですか?

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

Why are My MySQL LEFT JOIN Queries Returning Fewer Rows Than Expected?

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 サイトの他の関連記事を参照してください。

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