SQL: 2 gleichnamige Spalten verschiedener Tabellen zusammen auswerten

AIKler

Erfahrenes Mitglied
Hallo Leute

habe zwei (mehrere) Tabellen (unterkunft, Dienstleistungen, ...) welche die Spalte "ORT" haben.
Jetzt möchte ich alle Orte aus allen Tabellen einmal ausgegeben werden.

Soweit war ich dann schon mal, klappen tuts nicht :-(

Code:
select destinct (Unterkunft.Ort, Dienstleistungen.Ort) AS Orte
        FROM Unterkunft, Dienstleistungen

Bitte um hilfe
 
Sollte entweder so:

SQL:
SELECT DISTINCT Ort FROM Unterkunft
UNION
SELECT DISTINCT Ort FROM Dienstleistungen
ORDER BY Ort

oder so:

SQL:
SELECT Ort FROM Unterkunft
UNION
SELECT Ort FROM Dienstleistungen
GROUP BY Ort ORDER BY Ort

aussehen. Wobei die zweite Variante wohl die bessere ist.
 
Währe noch schöner. Ein UNION DISTINCT
SQL:
SELECT ort FROM Unterkunft
UNION DISTINCT
SELECT ort FROM dienstleistungen

-- Da DISTINCT beim UNION Standard ist, kann man ihn auch weglassen
SELECT ort FROM Unterkunft
UNION
SELECT ort FROM dienstleistungen


Wobei die zweite Variante wohl die bessere ist.
Da bin ich gerade anderer Meinung. Mach kein GROUP BY wenn du keinen Brauchst. Brauchen tut man ihn wenn man Summen, Anzahl etc. ermitteln will.
 
Zuletzt bearbeitet von einem Moderator:
@Yaslaw:
Nachdem was ich im Netz dazu gefunden habe, wird DISTINCT "intern" wie GROUP BY behandelt und beim Probieren sah es bei mir auch so aus als ob es etwas schneller wäre!? Deshalb habe ich diesen Vorschlag gemacht. Ich will dir da aber in keinster Weise wiedersprechen.

Erkläre mir nur mal bitte warum du nur 1 x DISTINCT verwendest und es trotzdem das richtige Ergebnis liefert?
 
@Yaslaw:
Nachdem was ich im Netz dazu gefunden habe, wird DISTINCT "intern" wie GROUP BY behandelt und beim Probieren sah es bei mir auch so aus als ob es etwas schneller wäre!? Deshalb habe ich diesen Vorschlag gemacht. Ich will dir da aber in keinster Weise wiedersprechen.
Wie es MySQL intern löst, weiss ich nicht. Aber es ist schöner. Grad da MySQL so unschöne Sachen zulässt wie ein GROUP BY mit nur einem angegeben Feld obwohl es mehrere sind nach denen Gruppiert wird. Es ist auch sofort klar was man damit erreichen will: Eindeutige Datensätze.

SQL:
-- Funktioniert in MySQL. Ist aber alles andere als schön:
SELECT a, b FROM tbl GROUP BY a;

-- Diese beide Varianten sind sauber
SELECT a, b FROM tbl GROUP BY a, b;
SELECT DISTINCT a, b FROM tbl;

Erkläre mir nur mal bitte warum du nur 1 x DISTINCT verwendest und es trotzdem das richtige Ergebnis liefert?
Weil MySQL das so handhabt. Ich verwende nicht SELECT DISTINCT, das sich auf den SELECT bezieht, sondern ien UNION DISTINCT. Der Wird beim UNION ausgeführt - also nach den SELECTs.

Bei deinen 2 Lösungen wird übrigens ebenfalls ein UNION DISTINCT ausgeführt, denn das DISTINCT ist Standart im UNION. Will man das verhindern muss man UNION ALL verwenden
 
Zuletzt bearbeitet von einem Moderator:
Zurück