Meerdere nationaliteiten ophalen met 1 sql
Jeroen Jansen
13/02/2008 10:42:00Voor een export wil ik graag meerdere nationaliteiten per persoon in 1 record ophalen.
De tabellen waar de gegevens in staan zijn Persoon (prsprsanr is sleutelveld) en Nationaliteit (met natnatntk voor de nationaliteitscode, natprsanr als koppelveld en natidcvrv om te kijken of nationaliteit is vervallen).
Ik ben al een tijdje aan het puzzelen maar kom er nog niet uit. Dit is wat ik nu heb:
Hierbij krijg ik bij een persoon met 3 nationaliteiten het volgende resultaat:
prsprsanr-nat1-nat2-nat3
123456789-1-40-389
123456789-1-389-40
De laatste zou ik dus graag ook niet in de resultaten van de query terug zien
De tabellen waar de gegevens in staan zijn Persoon (prsprsanr is sleutelveld) en Nationaliteit (met natnatntk voor de nationaliteitscode, natprsanr als koppelveld en natidcvrv om te kijken of nationaliteit is vervallen).
Ik ben al een tijdje aan het puzzelen maar kom er nog niet uit. Dit is wat ik nu heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT persoon.prsprsanr,
nat1.natnatntk,
nat2.natnatntk,
nat3.natnatntk
FROM persoon as persoon
left join nationaliteit as nat1 on persoon.prsprsanr = nat1.natprsanr and nat1.natidcvrv = ''
left join nationaliteit as nat2 on nat1.natprsanr = nat2.natprsanr and nat2.natidcvrv = ''
left join nationaliteit as nat3 on nat3.natprsanr = nat2.natprsanr and nat3.natidcvrv = ''
WHERE nat2.natnatntk not in(nat1.natnatntk, nat3.natnatntk)
AND nat3.natnatntk not in(nat1.natnatntk, nat2.natnatntk)
AND nat1.natnatntk = (select min(ns.natnatntk) from nationaliteit as ns where ns.natprsanr = nat1.natprsanr)
ORDER BY nat1.natprsanr, nat1.natnatntk asc
nat1.natnatntk,
nat2.natnatntk,
nat3.natnatntk
FROM persoon as persoon
left join nationaliteit as nat1 on persoon.prsprsanr = nat1.natprsanr and nat1.natidcvrv = ''
left join nationaliteit as nat2 on nat1.natprsanr = nat2.natprsanr and nat2.natidcvrv = ''
left join nationaliteit as nat3 on nat3.natprsanr = nat2.natprsanr and nat3.natidcvrv = ''
WHERE nat2.natnatntk not in(nat1.natnatntk, nat3.natnatntk)
AND nat3.natnatntk not in(nat1.natnatntk, nat2.natnatntk)
AND nat1.natnatntk = (select min(ns.natnatntk) from nationaliteit as ns where ns.natprsanr = nat1.natprsanr)
ORDER BY nat1.natprsanr, nat1.natnatntk asc
Hierbij krijg ik bij een persoon met 3 nationaliteiten het volgende resultaat:
prsprsanr-nat1-nat2-nat3
123456789-1-40-389
123456789-1-389-40
De laatste zou ik dus graag ook niet in de resultaten van de query terug zien
Er zijn nog geen reacties op dit bericht.