Heim >Datenbank >MySQL-Tutorial >Warum gibt mein Left Outer Join nur Teildaten aus der linken Tabelle zurück?
Linke äußere Verknüpfungen und unvollständige Daten aus der linken Tabelle
Es ist wichtig zu verstehen, wie sich Join-Bedingungen auf die Ergebnisse eines Left Outer Joins auswirken. Falsch platzierte Bedingungen können zu unvollständigen Daten aus der linken Tabelle führen.
Lassen Sie uns diese Abfrage untersuchen:
<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>
Mit dieser Abfrage sollen die täglichen Seitenöffnungen gezählt werden. Allerdings werden möglicherweise nur ein paar Tage angezeigt, auch wenn die Tabelle day
noch viel mehr enthält. Das Problem liegt in der WHERE
-Klausel.
Die Join-Bedingung ON day.days = DAY(FROM_UNIXTIME(open_date))
entspricht korrekt den Tagen. Aber WHERE tracking.open_id = 10
filtert nach der Verknüpfung und entfernt alle Tage ohne open_id = 10
in der tracking
-Tabelle.
Um alle Tage aus der linken Tabelle (day
) einzuschließen, unabhängig von Übereinstimmungen in tracking
, verschieben Sie die open_id
-Bedingung in die ON
-Klausel:
<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>
Diese korrigierte Abfrage stellt sicher, dass alle Tage enthalten sind, und liefert eine vollständige Anzahl geöffneter Seiten pro Tag, auch wenn für einige Tage Einträge in der tracking
-Tabelle mit open_id = 10
fehlen. Das COUNT(*)
gibt für diese Tage 0 zurück.
Das obige ist der detaillierte Inhalt vonWarum gibt mein Left Outer Join nur Teildaten aus der linken Tabelle zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!