2009-03-07 2 views
0

Ich habe eine Vererbungsbeziehung in meiner Datenbank, wo ich eine Elterntabelle habe (Tabelle A), die im Grunde eine Folge von automatisch inkrementierenden Ganzzahlen ist . Von hier aus habe ich mehrere Tabellen (Tabelle B, C & D), die auch eine Id-Spalte haben, die ein Fremdschlüssel für die Id-Spalte in Tabelle A ist.Wie Sie die konkrete Tabelle abfragen, wenn nur die Elterntabellen-ID bekannt ist

Jetzt ist meine Frage, wenn ich die ID habe, Was ist der effizienteste Weg, um die richtige Zeile aus Tabelle B, C oder D zu bekommen?

BEARBEITEN: Es wird nur eine Zeile mit der ID in Tabelle B, C oder D geben (in den anderen 2 wird es keine passende Zeile geben).

+0

Darf ich fragen, warum Sie Daten in zufälligen Tabellen speichern? Sie können in diesem Modell keine referenzielle Integrität haben. – cdonner

+0

Per cddonner Kommentar, können Sie eine bessere Antwort erhalten, wenn Sie Ihre Frage erneut stellen ... entweder haben Sie ein ungerades Datenmodell oder es ist nicht klar, was Sie tun möchten. –

+0

Danke für die Bearbeitung ... in diesem Fall würde das UNION-Beispiel funktionieren, wenn Sie nur herausfinden möchten, in welcher Tabelle die Zeile existiert. –

Antwort

1

Sie könnten union-Abfragen verwenden ... das heißt:

select 'TABLE B', a_id from b where a_id = 1 
UNION 
select 'TABLE C', a_id from c where a_id = 1 
UNION 
select 'TABLE D', a_id from d where a_id = 1; 

Dies würde Ihnen eine Liste der Tabellen mit einem a_id von 1, während auch die Tabelle zeigt es in residierte

Wenn alle. 3 Tabellen haben die gleiche Struktur, könnten Sie etwas ähnliches tun:

select b.* from b where a_id = 1 
UNION 
select c.* from c where a_id = 1 
UNION 
select d.* from d where a_id = 1; 
Verwandte Themen