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

Probleme beim joinen mit versch. Bedingungen pro Zeile

Dieses Thema im Forum "Oracle" wurde erstellt von cobretti, 28 April 2013.

  1. cobretti

    cobretti Neuer Benutzer

    Hallo,

    ich hab folgendes Problem beim erstellen einer wie ich denke nicht allzu komplizierten Abfrage:
    Ausgangstabellen:
    [​IMG]

    Erklärungen:
    md_runs: run_pk ist eindeutig, eine sys_pk hat mehrer run_pk, jeder run_pk ist ein run_date zugeordnet

    dl_config: table_name ist nicht eindeutig, jeder table_name besitzt mehrere run_pk

    table_size: ordnet einer sys_pk ein table_name zu, eine sys_pk kann mehrere table_name haben

    Gewünschtes Vorgehen:
    Am Ende würde ich gerne folgende Tabelle erahlten:
    [​IMG]

    Diese erhalte ich dadurch, dass ich die table_size Tabelle zeile für zeile durchgehe und zuerst nach dem table_name in der dl_config tabelle suche.
    Alle run_pk die ich dort mit der entsprechenden Tabelle finde überprüfe ich anhand der md_runs tabelle ob sie der gewünschten sys_pk zugeordnet sind, und wenn ja übernehmen ich das run_date mit der höchsten run_pk in die tabelle table_updates.

    Habe bereits eine Abfrage geschrieben, in die ich die sys_pk und den table_name von Hand eingeben kann und mir dann die entsprechende run_pk (und damit auch das run_date) ausgegeben wird.

    select max(run_date) from md_runs where sys_pk = 'gewünschte sys_pk'
    and run_pk in
    (select run_pk from dl_config where table_name = 'gewünschten table_name')

    Leider nützt mir das wenig, da ich nicht jede sys_pk/table_name Kombination von Hand eingeben will. Eine Schleife um diese Anweisung ist auch keine Lösung, da das dann mit den realen Tabellen zu lange dauert.
    Würde das ganze gerne irgendwie über einen join oder so realisieren.
    Kann mir da wer helfen?
    Vielen Dank schonmal :)
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Interessanter Ansatz ;-)

    Code:
    test=*# select * from table_size ;
     table_name | sys_pk
    ------------+--------
     table_10   |      4
     table_10   |      2
     table_7    |      3
    (3 rows)
    
    Time: 0,146 ms
    test=*# select * from md_runs ;
     sys_pk | run_pk  |  run_date
    --------+---------+------------
          3 | 5473548 | 2013-05-08
          2 |     638 | 2013-04-27
    (2 rows)
    
    Time: 0,144 ms
    test=*# select * from dl_config ;
     table_name | run_pk
    ------------+---------
     table_7    | 5473548
     table_10   |     638
    (2 rows)
    
    Time: 0,157 ms
    test=*# select a.table_name, a.sys_pk, b.run_date from table_size a left join md_runs b on a.sys_pk=b.sys_pk left join dl_config c on b.run_pk=c.run_pk;
     table_name | sys_pk |  run_date
    ------------+--------+------------
     table_10   |      2 | 2013-04-27
     table_7    |      3 | 2013-05-08
     table_10   |      4 |
    (3 rows)
    
    
    Andreas
     
  3. akretschmer

    akretschmer Datenbank-Guru

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