Eine Tabelle mit mehreren Tabellen vergleichen

burakja

Neuer Benutzer
Beiträge
1
Hallo,

ich habe in der Datenbank eine Tabelle "x_tab" und eine Spalte in der tabelle mit der Name "P_ID". Ich habe aber noch weitere 50 Tabellen mit dem namen "y_tab_1", "y_tab_2".... bis "y_tab_50". In jeder y_tab Tabelle habe ich die Spalte "P_ID". (siehe Anhang)Unbenannt.png

Ich will jetzt diese x_tab mit alle y_tab 's vergleichen und wissen, ob die ids überall vorhanden sind und welche noch frei sind..

Hat vlt jemand eine praktische Lösung dafür?

LG
burak
 
Werbung:
Hallo,

ich habe in der Datenbank eine Tabelle "x_tab" und eine Spalte in der tabelle mit der Name "P_ID". Ich habe aber noch weitere 50 Tabellen mit dem namen "y_tab_1", "y_tab_2".... bis "y_tab_50". In jeder y_tab Tabelle habe ich die Spalte "P_ID". (siehe Anhang)Anhang anzeigen 233

Ich will jetzt diese x_tab mit alle y_tab 's vergleichen und wissen, ob die ids überall vorhanden sind und welche noch frei sind..

Hat vlt jemand eine praktische Lösung dafür?

LG
burak

Zuerst einmal: warum sowas? Das klingt nach einem massiven Fehler imDesign. Erklär uns das.
 
Code:
SELECT   x.*,
     y1.Name AS y1_Name,
     y2.Name AS y2_Name,
     ...
FROM   X_TAB x,
LEFT JOIN Y_TAB_1 y1 ON x.P_ID = y1.P_ID
LEFT JOIN Y_TAB_2 y2 ON x.P_ID = y2.P_ID
...
Der LEFT JOIN ist dein Freund. Aufgrund des beschissenen Designs wird er ziemlich lang und vermutlich auch ziemlich langsam. Aber er liefert dir, ausgehend von der X_TAB zu jeder anderen Tabelle eine Spalte in der entweder ein Name steht wenn es die ID dort gibt oder eben NULL.
 
Werbung:
Der LEFT JOIN ist dein Freund. Aufgrund des beschissenen Designs wird er ziemlich lang und vermutlich auch ziemlich langsam. Aber er liefert dir, ausgehend von der X_TAB zu jeder anderen Tabelle eine Spalte in der entweder ein Name steht wenn es die ID dort gibt oder eben NULL.

Ich glaub eher, er hat:

Code:
test=*# select * from x_tab ;
p_id | name
------+------
  1 | x1
  2 | x2
  3 | x3
(3 rows)

test=*# select * from y_tab_1 ;
p_id | name
------+------
  1 | y1
(1 row)

test=*# select * from y_tab_2 ;
p_id | name
------+------
  1 | y1
  2 | y2
(2 rows)

test=*# select * from y_tab_3 ;
p_id | name
------+------
(0 rows)

und sucht

Code:
test=*# select * from x_tab left join (select * from y_tab_1 union all select * from y_tab_2 union all select * from y_tab_3) bla on x_tab.p_id = bla.p_id where bla.p_id is null;
p_id | name | p_id | name
------+------+------+------
  3 | x3  |  |
(1 row)

An dieser Stelle verweise ich aber auf meine bereits gestellte Frage.

Daß die Darstellung kapott ist tut mir leid - offenbar werden seit dem letzten Update der Forensoftware Leerzeichen in code-Blöcken gelöscht.
 
Zurück
Oben