Meine Datenbank verfügt über mehrere Gruppen, die Ereignisse an einem oder mehreren Orten hosten. Meistens ist es nur der eine Ort, aber Gruppen haben manchmal zwei. Um die Dinge einfach zu halten, wird die folgende Datensatz ist klein und imaginäre:Verknüpfen von zwei Tabellen mit Unterabfragen von einem
‚Gruppen‘ Tisch
+--------------+--------------+--------------+
| name | pri_venue_id | alt_venue_id |
+--------------+--------------+--------------+
| Fast Fingers | 3 | 0 |
| Data Dishers | 4 | 0 |
| Leet Hacks | 5 | 2 |
+--------------+--------------+--------------+
Tisch ‚Locations‘
+----------+-------------------------+-----------------+
| venue_id | name | location |
+----------+-------------------------+-----------------+
| 1 | Public Archives | Querytown |
| 2 | Storage Function Centre | Drive Bay |
| 3 | Key Convention Centre | Qwertyville |
| 4 | Head-spin Mall | Drive Park |
| 5 | Fast Storage Facility | Memory Bay |
+----------+-------------------------+-----------------+
ich die beiden Tabellen miteinander verbinden möchte eine einzelne Abfrage, sodass das Ergebnis der Abfrage die Gruppe, den Namen und Standort des primären Veranstaltungsorts und den zweiten Veranstaltungsort und den zweiten Standort anzeigt, falls vorhanden. Im Fall, dass es keine zweite/alternative Veranstaltungsort ist, zeigen nur die primäre, dann zwei NULLS, etwa so:
Data Dishers, Head-spin Mall, Drive Park, NULL, NULL
Fast Fingers, Key Convention Centre, Qwertyville, NULL, NULL
Leet Hacks, Fast Storage Facility, Memory Bay, Storage Function Centre, Drive Bay
Bitte beachten Sie, dass die Ergebnismenge nicht durch Komma getrennte muss sein.
Ich habe andere Stackoverflow Fragen gelesen, habe aber noch keine Lösung gefunden. Ich bekomme entweder doppelte Zeilen oder sonst alles außer dem alternativen Ort, der immer NULL anzeigt. Ich bin mir nicht sicher, was am besten zum Gruppieren wäre, da ich das in einer anderen Frage gesehen habe. Auch versucht, eine Union zu verwenden, aber konnte nicht scheinen, es zur Arbeit zu bringen.
Hier ist die nächste Frage, die ich gekommen bin, oben mit:
SELECT
DISTINCT groups. NAME,
x. NAME,
x.location,
y. NAME,
y.location
FROM groups
INNER JOIN (
SELECT
venues.*
FROM venues
INNER JOIN groups ON venue_id = pri_venue_id
) AS x,
groups
INNER JOIN (
SELECT
venues.*
FROM venues
LEFT JOIN groups ON venue_id = alt_venue_id
) AS y
GROUP BY x.venue_id
ORDER BY groups. NAME;
Vielen Dank im Voraus.
Stellt sich heraus, ich nicht Unterabfragen verwenden haben müssen die richtigen Ergebnisse zu erzielen. Die richtige Abfrage war: "SELECT g.name AS g_name, v1.name AS v_name, v1.location, v2.name AS v_name2, v2.location AS location2 FROM Gruppen g INNER JOIN Standorte v1 ON g.pri_venue_id = v1.venue_id LINKS JOIN Veranstaltungsorte v2 ON g.alt_venue_id = v2.venue_id ORDER BY g.name " –