[SQL] multiple conditional joins *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gooddaddy
  • Registratie: Juli 2001
  • Laatst online: 31-07 08:26
Ik weet niet hoe ik hier uit moet komen, dus misschien heeft iemand een idee:

Ik heb een aantal tabellen (vereenvoudigd weergegeven)

Tabel A: (ID, tblcode, persoonscode, type)
Tabel B: (ID, tblcode, tblnaam)
Tabel C, D en E (ID, Voornaam, Achternaam)

de kolommen tblcode in Tabel A en B zijn gerelateerd. Het veld persoonscode komt overeen met het veld ID van Tabel C, D of E, afhankelijk van het veld tblcode.

Nu wil een query maken die als resultaat de Voornaam, Achternaam en Type geeft. Nu kan ik met een conditional inner join wel zo maken dat het type uit Tabel A en de voornaam en achternaam uit tabel C krijg, maar ik dan heb ik de voornamen en achternamen uit tabel D en E nog niet. Ik zal dus waarschijnlijk iets dynamisch moeten maken, maar ik weet absoluut niet hoe

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dus je wil A+B+C, A+B+D en A+B+E per groepje combineren en daar een gezamelijk resultaat van tonen?

Ik gok dat je het beste af bent met drie losse queries die gecombineerd worden dmv een UNION.

Acties:
  • 0 Henk 'm!

  • gooddaddy
  • Registratie: Juli 2001
  • Laatst online: 31-07 08:26
Dat lukt inderdaad, alleen gaat het dan natuurlijk mis wanneer er er een extra tabel zoals C, D en E bijkomt. Dan moet er een extra select gemaakt worden en met een Union erbij geplaatst. Maar dat komt dan misschien wel omdat de database zo stom ontwerpen is.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als C, D en E identieke data bevatten die samen gequeried worden, dan moeten ze niet in losse tabellen zitten (of iig niet de velden die generiek zijn). Een nieuwe tabel zal dus inderdaad een nieuw element aan de union toevoegen...

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
gooddaddy schreef op donderdag 14 januari 2010 @ 11:45:
Dat lukt inderdaad, alleen gaat het dan natuurlijk mis wanneer er er een extra tabel zoals C, D en E bijkomt. Dan moet er een extra select gemaakt worden en met een Union erbij geplaatst. Maar dat komt dan misschien wel omdat de database zo stom ontwerpen is.
Maak een view, dan hoef je alleen de view te onderhouden.

Acties:
  • 0 Henk 'm!

  • pasz
  • Registratie: Februari 2000
  • Laatst online: 01-09 23:08
Waarom hebben tabel C,D en E dezelfde vorm ? Legacy ?

woei!


Acties:
  • 0 Henk 'm!

  • gooddaddy
  • Registratie: Juli 2001
  • Laatst online: 31-07 08:26
Tabel C, D en E bevatten data van verschillende soorten personen (patienten, contactpersonen en artsen), die alemaal een ID hebben. Het zijn stamtabellen. Een arts kan hetzelfde ID hebben als een patient of contactpersoon.

Een view aanmaken zou inderdaad ook kunnen

Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 10-09 21:59
Ik zou in dit geval kiezen om 3 left joins te doen en dan met coalesce het juiste resultaat laten zien.

SQL:
1
2
3
4
5
6
7
8
SELECT COALESCE(C.Voornaam, D.Voornaam, E.Voornaam) AS Voornaam
, COALESCE(C.Achternaam, D.Achternaam, E.Achternaam) AS Achternaam
, A.Type
FROM A
JOIN B ON A.tblcode = B.tblcode
LEFT JOIN C ON A.persoonscode = C.id and b.tblnaam = 'C'
LEFT JOIN D ON A.persoonscode = D.id and b.tblnaam = 'D'
LEFT JOIN E ON A.persoonscode = E.id and b.tblnaam = 'E'
Pagina: 1