Warum fehlen Zeilen in meinem Left Outer Join-Ergebnis?
Jan 23, 2025 pm 04:13 PMGrundlegendes zu fehlenden Zeilen in Left Outer Joins
Ein Benutzer, der versuchte, die täglichen Seitenaufrufe zu berechnen, stieß auf eine häufige Falle beim Left-Outer-Join: fehlende Zeilen in der linken Tabelle. Die Abfrage zielte darauf ab, Daten aus day
- und tracking
-Tabellen mithilfe eines linken äußeren Joins zu kombinieren:
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
Die day
-Tabelle enthielt Daten für die Tage 1–30, das Ergebnis zeigte jedoch nur die Tage 1 und 9. Diese Diskrepanz ergibt sich aus der Platzierung der WHERE
-Klausel.
Das Problem: Falsche Platzierung der WHERE-Klausel
Die WHERE tracking.open_id = 10
-Klausel filtert nach dem Join. Dies bedeutet, dass Zeilen entfernt werden, in denen tracking.open_id
nicht 10 ist, auch wenn diese Zeilen aus der linken Tabelle (day
) stammen. Ein linker äußerer Join ist so konzipiert, dass er alle Zeilen der linken Tabelle einbezieht, unabhängig von Übereinstimmungen in der rechten Tabelle. Die WHERE
-Klausel negiert dieses Verhalten effektiv.
Die Lösung: Integration des Filters in die JOIN-Bedingung
Um alle Tage korrekt aus der day
-Tabelle abzurufen, muss die Filterbedingung in die JOIN
-Bedingung selbst integriert werden:
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
Durch das Verschieben von tracking.open_id = 10
in die ON
-Klausel erfolgt die Filterung bevor die Zeilen kombiniert werden. Dadurch wird sichergestellt, dass beim Join nur übereinstimmende Zeilen aus der Tabelle tracking
(wobei open_id = 10
) berücksichtigt werden, während dennoch alle Zeilen aus der Tabelle day
im Endergebnis erhalten bleiben. Dies spiegelt genau die Absicht eines linken äußeren Joins wider.
Das obige ist der detaillierte Inhalt vonWarum fehlen Zeilen in meinem Left Outer Join-Ergebnis?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)?

Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen?
