ホームページ > データベース > mysql チュートリアル > 左外部結合が左テーブルから部分的なデータしか返さないのはなぜですか?

左外部結合が左テーブルから部分的なデータしか返さないのはなぜですか?

Susan Sarandon
リリース: 2025-01-23 16:08:10
オリジナル
425 人が閲覧しました

Why Does My Left Outer Join Only Return Partial Data From the Left Table?

左のテーブルからの左外部結合と不完全なデータ

結合条件が左外部結合の結果にどのような影響を与えるかを理解することが重要です。 条件を不適切に配置すると、左側のテーブルのデータが不完全になる可能性があります。

このクエリを調べてみましょう:

<code class="language-sql">SELECT day.days, COUNT(*) AS opens
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date))
WHERE tracking.open_id = 10
GROUP BY day.days;</code>
ログイン後にコピー

このクエリは、毎日のページのオープン数をカウントすることを目的としています。 ただし、day テーブルにさらに多くの日が含まれている場合でも、数日しか表示されない場合があります。 問題は WHERE 節にあります。

結合条件 ON day.days = DAY(FROM_UNIXTIME(open_date)) は日付と正しく一致します。 ただし、WHERE tracking.open_id = 10 は結合の をフィルターし、open_id = 10 テーブルに tracking のない日をすべて削除します。

内の一致に関係なく、左側のテーブル () の dayすべてtracking 日を含めるには、open_id 条件を ON 句に移動します。

<code class="language-sql">SELECT day.days, COUNT(*) AS opens
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10
GROUP BY day.days;</code>
ログイン後にコピー

この修正されたクエリにより、tracking を含む open_id = 10 テーブルのエントリが一部の日で欠落している場合でも、すべての日が含まれることが保証され、完全な日次ページ オープン数が提供されます。 COUNT(*) は、それらの日数に対して 0 を返します。

以上が左外部結合が左テーブルから部分的なデータしか返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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