ik heb 3 tabellen: afdeling, subafdeling en afd_subafdeling
Hoe kan ik ervoor zorgen dat afd_subafdeling.afdeling_id en afd_subafdeling.subafdeling_id
worden gejoint met tabel afdeling en subafdeling en dat ik de afdelingsnaam en subafdelingsnaam krijg?

afdeling

id
afd_naam


subafdeling

id
subaf_naam


afd_subafdeling

id
afdeling_id
subafdeling_id
SELECT a.afd_naam , s.subaf_naam
FROM afdeling a
RIGHT JOIN afd_subafdeling as ON as.afdeling_id = a.if
RIGHT JOIN subafdeling s on as.subafdeling_id = s.id

Give or take
ik krijg deze melding:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON as.afdeling_id = a.id RIGHT JOIN subafdeling s on as.subafdeling_id = s.id L' at line 3

Jacco Engel op 15/05/2014 10:25:23

SELECT a.afd_naam , s.subaf_naam
FROM afdeling a
RIGHT JOIN afd_subafdeling as ON as.afdeling_id = a.if
RIGHT JOIN subafdeling s on as.subafdeling_id = s.id

Give or take


my bad

SELECT a.afd_naam , s.subaf_naam
FROM afdeling a
RIGHT JOIN afd_subafdeling tas ON as.afdeling_id = a.if
RIGHT JOIN subafdeling s on tas.subafdeling_id = s.id

De alt die ik aan de afd_subafdeling had gegeven (as) is een gereserveerd woord in SQL. Srry nog maar 3 bakken kofie op en dan maak je dat soort fouten
Opvallend dat je dit met een RIGHT JOIN doet trouwens. Je weet dat je dan wel alle subafdelingen krijgt, ook die niet gelinked zijn aan een afdeling? (indien van toepassing uiteraard)
Dat klopt, daar ben ik net ook achter gekomen! Weer jij wel hoe het moet?
Erwin H op 15/05/2014 10:37:43

Opvallend dat je dit met een RIGHT JOIN doet trouwens. Je weet dat je dan wel alle subafdelingen krijgt, ook die niet gelinked zijn aan een afdeling? (indien van toepassing uiteraard)




Toevoeging op 15/05/2014 10:40:18:

Ik heb het al, het moet gewoon join zijn.

SELECT a.afd_naam, s.subaf_naam
FROM afdeling a
JOIN afd_subafdeling tas ON tas.afdeling_id = a.id
JOIN subafdeling s ON tas.subafdeling_id = s.id;

Thanks allemaal!!
Ja, LEFT JOIN gebruiken, wat een normalere gang van zaken is.
Het werkt namelijk zo dat je bij een LEFT JOIN uit gaat van de 'linker' tabel (in jouw geval de afdelingen, die wordt als eerste opgenomen in de FROM clause). Van die linker tabel krijg je alle rijen. Van de 'rechter' tabel (in jouw geval de subafdelingen en de koppel tabel) krijg je alleen de rijen die daadwerkelijk gelinkt zijn aan de linker tabel. Bij een RIGHT JOIN werkt het net andersom, dan krijg je dus alle sub afdelingen en alleen de afdelingen die eraan gelinkt zijn.

In dit soort gevallen is het 99 van de 100 keer zo dat je een LEFT JOIN nodig hebt en geen RIGHT JOIN. Vandaar dat het nogal opvallend was.

P.S. Bij een INNER JOIN, om het rijtje compleet te maken, krijg je alleen de rijen waarvoor in beide tabellen een record bestaat.
Erwin H op 15/05/2014 10:37:43

Opvallend dat je dit met een RIGHT JOIN doet trouwens. Je weet dat je dan wel alle subafdelingen krijgt, ook die niet gelinked zijn aan een afdeling? (indien van toepassing uiteraard)


Ja dat weet ik maar leek me in een afdeling subafdeling situatie niet echt relevant :P
Rare redenatie als je het mij vraagt....
Erwin H op 15/05/2014 10:58:40

Rare redenatie als je het mij vraagt....


Dan is het maar goed dat ik het je niet vraag

Edit , Erwin heb je even gemessaged om het een en ander recht te zetten , maar wil het topic niet kapen of vullen met dingen waar TS weinig aan heeft
Afgehandeld :-)

Reageren