Ich bin ein SQL-Noob und so könnte dies für Sie alle ziemlich einfach sein, aber ich habe Mühe, hier einige Logik anzuwenden. Ich versuche, eine Liste aller Städte und Staaten aus 2 Tabellen (Lieferanten vs Verbraucher Tabellen) zu erstellen, verknüpft durch eine 3. transact Tabelle, und liste die Anzahl der Lieferanten und Verbraucher in jeder Stadt (gruppiert nach). Zu beachten ist, dass die Anzahl der Städte und des Bundeslandes in den 2 Tabellen nicht übereinstimmt. Für diejenigen, die übereinstimmen, brauche ich eine Ausgabe, die die entsprechende Anzahl von Lieferanten und Konsumenten zeigt, wenn der Staat/die Stadt in einer Tabelle vorhanden ist und nicht die andere, muss ich eine Anzahl von null anzeigen, die unter der entsprechenden Zahlspalte angezeigt wird. Ich habe 3 Tabellen - Supplier, Consumer und Transaction verknüpft durch Supp_ID und Con_ID als Schlüssel, wie in meinem Code unten erwähnt.sql join issue - keine erwartete Ausgabe
Wenn ich diese Abfrage eingib, bekomme ich seltsame Zahlen gegen die Anzahl der Lieferanten und Verbraucher. Meine beste Vermutung ist, dass dort irgendwo ein Selbstmitglied sein muss, aber ich bin nicht sicher, wie ich das von hier aus machen soll. Jede Hilfe wäre willkommen! Thank u
PS:
SELECT DISTINCT City, State, COUNT(Supp_ID)
FROM SuppTb S GROUP BY City, State
und
SELECT DISTINCT City, State, COUNT(Con_ID)
FROM ConTb C GROUP BY City, State
gibt mir die Ausgabe-I getrennt von beiden Tabellen müssen. Ausgang 1 hat 3 Spalten und 7 Zeilen, Ausgang 2 hat 3 Spalten und 6 Zeilen. Ich brauche eine einzige kombinierte Ausgabe mit 4 Spalten und 8 Zeilen. Sie müssen nur einen Weg finden, diese 2 Ausgänge zu kombinieren und Nullen einzufügen, wo immer es nötig ist.
Edit- Die genaue Frage ist, eine vergleichende Liste der Lieferanten oder Verbraucherstaaten und Städte mit der jeweiligen Anzahl von Lieferanten und Verbrauchern in jeder Stadt zu generieren. Wunsch Output-
State City Supp_count Cons_count
Illinois Chicago 2 3
Illinois Springfield 2 0
Michigan Lansing 0 3
etc das heißt, 0 für die Ausgabe, wenn supp/Nachteile Tabelle nicht die Stadt/Land aufgelistet hat.
Bearbeiten 2- Dieser Code wurde versucht, gab mir die gewünschte Anzahl an Kunden, aber gibt seltsame Zahlen auf Lieferanten zählen. Ich stecke jetzt total fest! die Ideen ausgehen ..
SELECT C.State, C.City, COUNT(DISTINCT S.Supp_ID) AS Supp_Count, COUNT(DISTINCT C.Con_ID) AS Cust_Count
FROM Tb_Supplier S LEFT JOIN Tb_Transactions T
ON S.Supp_ID = T.Supp_ID LEFT JOIN
Tb_Consumer C ON T.Con_ID = C.Con_ID
GROUP BY C.State, C.City
EXCEPT
SELECT S.State, S.City, COUNT(DISTINCT S.Supp_ID) AS Supp_Count, COUNT(DISTINCT C.Con_ID) AS Cust_Count
FROM Tb_Supplier S LEFT JOIN Tb_Transactions T
ON S.Supp_ID = T.Supp_ID LEFT JOIN
Tb_Consumer C ON T.Con_ID = C.Con_ID
GROUP BY S.State, S.City
Vielen Dank für Ihre Zeit, stimmen Sie zu, dass JOIN in Syntax gute Klarheit gibt. Aber die Abfrage lieferte immer noch nicht die gewünschte Ausgabe. Ich habe einige Änderungen vorgenommen, um genau das zu integrieren, was ich brauche, und habe die letzte Spur mit LINKER VERBINDUNG eingeschlossen. Ich habe die richtige Anzahl an Kundenzählern, aber immer noch große Zahlen für die Lieferantenanzahl wie ich, als ich Ihre Anfrage lief) – Cur123
@ Cur123. . . Verwenden Sie 'COUNT (DISTINCT)'? –
Ja, ich habe Mr.Linoff. Ich bekam die Antwort mit UNION und zuerst eine temporäre Tabelle erstellen und dann die temporäre Tabelle mit den Lieferanten- und Consumer-Tabellen über FULL OUTER JOINS verknüpfen, um das genaue Ergebnis zu erhalten, das ich wollte. Nahm eine sehr lange Zeit, aber war sehr befriedigend, um es endlich zu bekommen! Ich habe meine Antwort selbst geposted, sobald ich es bekommen habe .. Entschuldigung, wenn ich es nicht klar gemacht hätte .. Nochmals vielen Dank für Ihre Unterstützung! – Cur123