Joins in de praktijk (1)
Combinatie LEFT en INNER JOIN
Als aan één tabel meerdere tabellen gejoined worden dan mogen INNER en LEFT JOIN door elkaar gebruikt worden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
a.a_naam,
b.b_naam,
c.c_naam,
d.d_naam
FROM
tabelA a
INNER JOIN
tabelB b
ON a.a_id = b.a_id
LEFT JOIN
tabelC c
ON a.a_id = c.a_id
INNER JOIN
tabelD d
ON a.a_id = d.a_id
a.a_naam,
b.b_naam,
c.c_naam,
d.d_naam
FROM
tabelA a
INNER JOIN
tabelB b
ON a.a_id = b.a_id
LEFT JOIN
tabelC c
ON a.a_id = c.a_id
INNER JOIN
tabelD d
ON a.a_id = d.a_id
Waar de LEFT JOIN ook staat, het eindresultaat blijft hetzelfde, namelijk de records waarvan de a_id zowel in a,b en d voorkomen en de records waarvan de a_id eventueel in tabel c voorkomt.
Er zijn echter situaties waarin je wel alle records van tabel A wilt hebben, maar alleen de records van tabel B die in tabel C ook een gegeven hebben.
Bijvoorbeeld, bij de bedrijven en contactpersonen tabellen uit het vorige hoofdstuk hebben een derde tabel met de (privé)adresgegevens van de contactpersonen (indien bekend). We moeten dan met een nested join gaan werken, dat zie er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
b.bedr_naam,
c.voornaam,
a.adres
FROM
bedrijven AS b
LEFT JOIN
(
contactpersonen AS c
INNER JOIN
contactadressen AS a
ON c.contact_id = a.contact_id
)
ON b.bedr_id = c.bedr_id
b.bedr_naam,
c.voornaam,
a.adres
FROM
bedrijven AS b
LEFT JOIN
(
contactpersonen AS c
INNER JOIN
contactadressen AS a
ON c.contact_id = a.contact_id
)
ON b.bedr_id = c.bedr_id
Dit hadden we in de eerdere query ook zo kunnen doen.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Joins algemeen
- Inner en outer join
- Cross en natural join
- Joins in de praktijk (1)
- Subqueries
- Joins in de praktijk (2)
- Group by
- Group by voorbeelden
- Conditional staments
- Nog meer voorbeelden
- Nawoord