Heim > Datenbank > MySQL-Tutorial > Warum geben meine beiden SQL-LEFT-JOINS falsche Besuchszahlen zurück?

Warum geben meine beiden SQL-LEFT-JOINS falsche Besuchszahlen zurück?

Barbara Streisand
Freigeben: 2025-01-23 12:27:10
Original
259 Leute haben es durchsucht

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

Debuggen von SQL LEFT JOINs: Genaue Besuchszahlen

Ein häufiges Problem entsteht, wenn mehrere LEFT JOINs in SQL verwendet werden, um Besuche über verschiedene Tabellen hinweg zu zählen. In diesem Beispiel werden drei Tabellen verwendet: users, grocery und fishmarket. Eine Abfrage, die darauf ausgelegt ist, die Besuche jedes Benutzers sowohl in Lebensmittelgeschäften als auch in Fischmärkten zu zählen, führt zu ungenauen Ergebnissen.

Das Problem ergibt sich aus der sequentiellen Natur der Verknüpfungen. Ein naiver Ansatz verbindet zunächst users und grocery und erstellt eine Zeile für jeden Benutzer mit einem account_balance ungleich Null und seinen Lebensmittelbesuchen. Die anschließende Verknüpfung mit fishmarket multipliziert dann fälschlicherweise die Anzahl der Lebensmittelbesuche mit der Anzahl der Fischmarktbesuche für jeden Benutzer. Dies führt zu überhöhten Besuchszahlen.

Die Lösung besteht darin, die Abfrage so umzustrukturieren, dass Besuchszahlen zusammengefasst werden, bevor sie der Tabelle users hinzugefügt werden. Dies wird mithilfe zweier korrelierter Unterabfragen effizient erreicht. Jede Unterabfrage zählt unabhängig voneinander Besuche für die Tabelle grocery oder fishmarket und gruppiert sie nach user_id. Diese aggregierten Zählungen werden dann mit der users-Tabelle zusammengeführt, um genaue Besuchsgesamtzahlen sicherzustellen.

Hier ist die korrigierte Abfrage mithilfe von Unterabfragen:

<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits
FROM users u
LEFT JOIN (
    SELECT user_id, COUNT(*) AS grocery_visits
    FROM grocery
    GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
    SELECT user_id, COUNT(*) AS fishmarket_visits
    FROM fishmarket
    GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;</code>
Nach dem Login kopieren

Diese überarbeitete Abfrage liefert genaue, unabhängige Zählungen der Lebensmittel- und Fischmarktbesuche für jeden Benutzer und behebt den Multiplikationsfehler der ursprünglichen Abfrage.

Das obige ist der detaillierte Inhalt vonWarum geben meine beiden SQL-LEFT-JOINS falsche Besuchszahlen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage