[(my)SQL] LEFT JOIN met voorwaarde

Pagina: 1
Acties:

  • Steven
  • Registratie: December 2000
  • Laatst online: 12-08 09:30
Hoi mensen,

Ik heb het volgende probleem waarvan de context te complex is om helemaal uit de doeken te doen dus daarom even geen uitleg waarvoor het gebruikt wordt... (sorry)

Als ik de volgende query doe:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT aanmelding.type, klastijd.id, DATE_FORMAT(datum, '%e-%m-%Y') as datum, klastijd.uur FROM klastijd, klas, lln
        LEFT JOIN aanmelding ON
        (aanmelding.klastijdid = klastijd.id AND
        aanmelding.llnid = '$llnid'
        )
    WHERE
        aanmeldenvan < NOW() AND
        aanmeldentot > NOW() AND
        klastijd.klasid = klas.id AND
        klas.groep = lln.groep AND
        lln.id = '$llnid'

Belangrijk hierin is dat in aanmelding NIET altijd een klastijd.id zit. (daarom dus de LEFT JOIN).

Op die manier krijg ik een tabel met
<type>, <id>, <datum>, <uur>
Waarbij type soms 2 is, soms 1 en soms NULL. Nou wil ik dat als type != 2 (LETOP: Type komt uit de JOIN!!) ik de record NIET te zien krijg. Dit gaat alleen fout. Als ik namelijk een type != '2' in de WHERE en/of JOIN zet dan krijg ik helemaal geen resultaten meer, maar zet ik in de WHERE een type = 2 krijg ik wel netjes alle resultaten die een type 2 hebben :?

Ik heb al wat andere JOIN's geprobeerd (maar dat had uiteraard geen resultaat) en ik heb al met HAVING gespeeld wat ook niet mocht baten.

Wie heeft enig idee hoe dit op te lossen is? (hoe ik dus alle record selecteer waar type != 2.)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
aanmelding.llnid = '$llnid'

Wat doet dit in je join condities?
Waarschijnlijk bedoel je dit in de where te zetten.

Who is John Galt?


  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Ik vind het een beetje erg lelijke query met die where-joins en dan ook nog een veldnaam als "type" en een veldnaam aliassen met dezelfde naam... is niet echt netjes IMO.

Misschien dat je beter zelf de joins kan definieren in je query ipv dat automatisch door de database te laten besluiten.

.edit: waardoor je waarschijnlijk ook direct zal zien waar de fout precies zit

[ Voor 15% gewijzigd door slm op 27-09-2003 15:30 ]

To study and not think is a waste. To think and not study is dangerous.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op zich is er niets mis met het gebruik van equi-joins ipv. inner joins, hoor. 't Is alleen idd niet zo erg duidelijk wat nou precies de relaties bepaalt en wat gewoon "overige" restricties zijn op je resultset.

Wat dat betreft debug je denk ik het best door even de query helemaal met joins uit te schrijven en vervolgens te kijken wat daar uit komt, en daarna pas met je where aan de slag te gaan.

Eveneens moet je where-clausules niet verwarren met ON-clausules. Zoals justmental al aangeeft.

Meer over wat die joins zijn en hoe ze in elkaar zitten kun je in de FAQ terugvinden :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz