左のテーブルからの左外部結合と不完全なデータ
結合条件が左外部結合の結果にどのような影響を与えるかを理解することが重要です。 条件を不適切に配置すると、左側のテーブルのデータが不完全になる可能性があります。
このクエリを調べてみましょう:
<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 サイトの他の関連記事を参照してください。