Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Eine Tabelle mit mehreren Tabellen vergleichen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von burakja, 29 September 2013.

  1. burakja

    burakja Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Zuerst einmal: warum sowas? Das klingt nach einem massiven Fehler imDesign. Erklär uns das.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden