Forum: PC-Programmierung SQL: Select aus einer ODER einer anderen Tabelle


von Horst (Gast)


Lesenswert?

Moin,

mal wieder eine Frage zu SQL:

Angenommen, ich habe dummerweise zwei verschiedene Tabellen mit ziemlich 
gleichen Feldern, die ähnliche Dinge beschreiben. Zum Beispiel Ding_Typ1 
und Ding_Typ2. Eine dritte Tabelle Ding_Index enthält die Fremdschlüssel 
fk_Ding, die zu einer der beiden Tabellen passen. Also eine Art Index. 
Es gibt zu jedem Eintrag in Ding_Index entweder einen Eintrag in 
Ding_Typ1 ODER in Ding_Typ2.

Ich bräuchte jetzt ein SQL-Statement, das den Index komplett durchgeht 
und die Felder entweder aus Ding_Typ1 oder Ding_Typ2 holt.

Geht das evtl. über ein JOIN?

von Matthias V. (matthias77)


Lesenswert?

Du machst zwei Select-Abfragen und "verkettest" die Ergebnisse mit 
union:

SELECT * FROM Ding_Typ1 WHERE ...
UNION
SELECT * FROM Ding_Typ2 WHERE ...

von Gerd E. (robberknight)


Lesenswert?

Horst schrieb:
> Eine dritte Tabelle Ding_Index enthält die Fremdschlüssel
> fk_Ding, die zu einer der beiden Tabellen passen. Also eine Art Index.
> Es gibt zu jedem Eintrag in Ding_Index entweder einen Eintrag in
> Ding_Typ1 ODER in Ding_Typ2.

Das ist aber ziemlich ungeschickt. Denn die Datenbank kann so nicht so 
einfach sicherstellen, daß es nicht zufälligerweise einen Ding_Typ1 und 
einen Ding_typ2 mit der selben Nummer gibt.

Normal macht man das daher eher so, daß es im Ding_Index zwei Felder 
gibt. Das eine Feld referenziert auf Ding_typ1 und das andere auf 
Ding_typ2. Damit sind die Primärschlüssel von Ding_typ1 und Ding_typ2 
unabhängig voneinander.

von SMler (Gast)


Lesenswert?

für welchen db soll das denn sein?

von SMler (Gast)


Lesenswert?

select ifnull(dbf1,dbf2) dbf
from fk_table
left join db1table on db1table.id = fk_table.id
left join db2table on db2table.id = fk_table.id

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.