Wir haben drei Tabellen, die wir die Anzahl der Kunden pro Unternehmen und die Anzahl der Datensätze pro Unternehmen abfragen möchten, um herauszufinden,mySQL mehrere INNER JOIN
Die drei Tabellen sind:
businessDetails
-------------------
businessDetails.ID
businessDetails.name
clientDetails
-------------------
clientDetails.ID
clientDetails.businessDetailsID
records
-------------------
records.ID
records.businessDetailsID
Wir Es gibt kein Problem damit, eine Zählung aus zwei Tabellen gleichzeitig auswählen zu können (businessDetails plus entweder clientDetails ODER Datensätze). Zum Beispiel
SELECT businessDetails.name AS businessName
, COUNT(clientDetails.businessDetailsID) AS totalClients
FROM `businessDetails`
INNER JOIN clientDetails
ON clientDetails.businessDetailsID = businessDetails.businessDetailsID
GROUP BY
businessDetails.name
ORDER BY
totalClients DESC
Diese Abfrage gibt uns ein gutes Ergebnis wie erwartet:
--------------------------------
businessName | totalClients
--------------------------------
Initech | 23
Cylon Inc | 148
The Dude Ltd | 71
Das Problem, das wir in laufen ist wie eine Zählung auf beiden clientDetails und Aufzeichnungen auf einmal zu tun. Wir haben versucht, die folgende Abfrage, haben aber festgestellt, dass es die Anzahl der totalClients aus irgendeinem Grund vervielfacht:
SELECT businessDetails.name AS businessName
, COUNT(clientDetails.businessDetailsID) AS totalClients
, COUNT(records.businessDetailsID) AS totalRecords
FROM `businessDetails`
INNER JOIN clientDetails
ON clientDetails.businessDetailsID = businessDetails.businessDetailsID
INNER JOIN records ON records.businessDetailsID = businessDetails.ID
GROUP BY
businessDetails.name
ORDER BY
totalClients DESC
dies ein Ergebnis etwas gibt wie:
--------------------------------------------------------
businessName | totalClients | totalRecords
--------------------------------------------------------
Initech | 93 | 93
Cylon Inc | 398 | 398
The Dude Ltd | 215 | 215
Ich erwarte, dass wir machen nur ein paar einfache Error. Jede Hilfe würde sehr geschätzt werden.
Danke - das hat sehr gut funktioniert! – direct00
@ direct00. Beachten Sie, dass dies bei großen Recordsets aufgrund der Unterabfrage zu Leistungsproblemen führen kann. –
+1 interessant: MySql kommt mit COUNT DISTINCT nicht immer zurecht; Das ist wahrscheinlich der Grund, warum diese Variante besser funktioniert als die, die ich skizziert habe. – davek