Toon posts:

[mysql 4.0.14 log] left join

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb 2 tabellen:

code:
1
2
3
4
5
6
7
8
9
tblKlanten (4201 tupels) 
  lng_KlantID
  txtBedrijfsnaam

tblContactpersonen (4056 tupels)
  lng_ContactID
  lngKlantID
  txtAchternaam
  blnHoofdcontact


Bij een contactpersoon kan worden aangegeven of het een hoofdcontactpersoon is: blnHoofdcontact = 1 of 0

Om te controleren hoeveel klanten / contactpersoon koppelingen er zijn, voor ik de eenvoudige query uit:

code:
1
SELECT * FROM tblKlanten K, tblContactpersonen C WHERE K.lng_KlantID = C.lngKlantID

(3890 tupels)

Nu wil ik dus het volgende:
Selecteer alle klanten, als blnHoofdcontact = 1 dan moet de achternaam van de contactpersoon worden getoond en als blnHoofdcontact = 0 of als er geen contactpersonen zijn dan moet de klant wel worden getoond maar moet de achternaam leeg worden teruggegeven

Zo zou ik dus van alle klanten de gegevens moeten krijgen en indien er een hoofdcontactpersoon is, dan wordt ook de achternaam van de hoofdcontactpersoon getoond.

Ik dacht dit op te lossen met een LEFT JOIN, maar ik krijg het niet voor elkaar.

Poging 1:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 

K.txtBedrijfsnaam,
C.txtAchternaam

FROM 

tblKlanten K

LEFT JOIN tblContactpersonen C on

K.lng_KlantID = C.lngKlantID 

WHERE 

C.blnHoofdcontact = 1


Zo krijg ik echter alleen de klanten waarvan er een hoofdcontactpersoon is.

Kan iemand mij verder op weg helpen?!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet de hoofdContact = 1 voorwaarde in de join criteria meegeven:

code:
1
2
3
SELECT k.BedrijfsNaam, C.Achternaam
FROM TblKlanten K
LEFT OUTER JOIN TblContactPersonen C ON k.lng_KlantID = C.lngKlantId AND blnHoofdContact = 1

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Thanks! Dat lijkt goed te werken! Maar de query doet er ruim 60 seconden over om uitgevoerd te worden :(

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dan zou ik eens kijken naar je indexen. Met het EXPLAIN commando kun je informatie over de uitvoering van de query ophalen, en zien waar de bottleneck zit.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
EXPLAIN heeft geholpen, heb nu een index gezet op de lng_KlantID en blnHoofdcontact en de query wordt nu in 1 seconde uitgevoerd :P