Union Select mit unterschiedlichen Where-Klauseln?
Marvin Esse
- mysql
- php
- sql
Hallo,
ich möchte gerne zwei Tabellen in eine Ergebnisliste packen. Tabelle 1 enthält die Felder vorname, nachname, pnr und kst. Tabelle 2 enthält die Felder vorname, nachame, kdnr, pnr, land.
Kann ich mit einer Abfrage aus Tabelle 1 nur die Einträge wo kst = '10001' ist und aus Tabelle 2 wo land = 'de' bekommen?
Ich hatte es mit Union select versucht, aber da erhalte ich die Fehlermeldung, dass das Feld land unbekannt ist.
select vorname, nachname from tabelle1 where kst = '10001' union select vorname, nachname from tabelle2 where land = 'de'
LG Marvin
Tach!
Kann ich mit einer Abfrage aus Tabelle 1 nur die Einträge wo kst = '10001' ist und aus Tabelle 2 wo land = 'de' bekommen?
Warum nicht?
Ich hatte es mit Union select versucht, aber da erhalte ich die Fehlermeldung, dass das Feld land unbekannt ist.
Dann wird es wohl so sein und du hast irgendeinen Fehler gemacht. Hast du mal die Teil-Querys einzeln laufen lassen?
dedlfix.
Hallo,
ich möchte gerne zwei Tabellen in eine Ergebnisliste packen. Tabelle 1 enthält die Felder vorname, nachname, pnr und kst. Tabelle 2 enthält die Felder vorname, nachame, kdnr, pnr, land.
Normal ist das nicht ;)
Kann ich mit einer Abfrage aus Tabelle 1 nur die Einträge wo kst = '10001' ist und aus Tabelle 2 wo land = 'de' bekommen?
Freilich doch.
Ich hatte es mit Union select versucht, aber da erhalte ich die Fehlermeldung, dass das Feld land unbekannt ist.
select vorname, nachname from tabelle1 where kst = '10001' union select vorname, nachname from tabelle2 where land = 'de'
Wenn Du mehrere Tabellen joinst, musst Du auch die Felnamen qualifizieren insbesondere dann, wenn in verschiedenen Tabellen gleiche Feldnamen stehen. Als Schlüssel für den join würde ich using(pnr)
verwenden auf den ersten Blick.
select
a.vorname as firstname,
a.nachname as lastname,
from
table1 a
join
table2 b using(pnr)
where a.kst = '1001'
and
b.land = "de"
Dein DB Design ist überarbeitungsbedürftig!
mfg
Tach!
select vorname, nachname from tabelle1 where kst = '10001' union select vorname, nachname from tabelle2 where land = 'de'
Wenn Du mehrere Tabellen joinst,
Das macht er doch gar nicht und hat das nach meinem Verständnis auch gar nicht vor. Er will nur zwei Datenmengen aus zwei Quellen jeweils individuell einschränken und erst anschließend zusammenführen. Das ist ein Anwendungsfall für UNION. Ein Join ist dazu nicht notwendig und erzeugt nur unnötige Verknüpfungen.
Dein DB Design ist überarbeitungsbedürftig!
Ach, woraus schließt du denn das? Kennst du den Anwendungsfall?
dedlfix.
Recht hat er möglicherweise schon. Zwei Tabellen mit Name, Vorname, PNR könnten smelly sein. Wenn sie denn zum gleichen Bestand gehören...
Der UNION sollte jedenfalls nicht an syntaktischen Problemen scheitern, er sieht richtig aus.
Rolf