Probleme beim joinen mit versch. Bedingungen pro Zeile

cobretti

Neuer Benutzer
Beiträge
1
Hallo,

ich hab folgendes Problem beim erstellen einer wie ich denke nicht allzu komplizierten Abfrage:
Ausgangstabellen:
Ausgangstabellen.jpg


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:
Zieltabelle.jpg


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 :)
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.736
Würde das ganze gerne irgendwie über einen join oder so realisieren.
Kann mir da wer helfen?
Vielen Dank schonmal :)


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
 
Werbung:
Oben