Stel, je hebt deze 2 tabelllen:
tblPersoon en tblAdres.
In tblPersoon heb je 1 record:
id: 1
naam: 'whoami'
in tblAdres heb je 1 record:
id: 1
persoonid: 1
straat: straat
Nu, als ik deze query uitvoer:
Dan krijg ik 0 records terug
Als ik deze query uitvoer:
Dan krijg ik wel een record terug.
Eigenlijk had ik verwacht dat beide queries eenzelfde resultaat gingen teruggeven, maar blijkbaar is het niet zo.
Een verklaring is makkelijk: bij de eerste query wordt er eerst gejoined (left join), en dan worden de rows die niet aan de WHERE voldoen eruit gefiltert.
Bij de 2de query worden de rows uit tbladres gefiltert die niet aan de voorwaarde voldoen, en dan wordt er gejoined, en aangezien het een OUTER JOIN is, wordt er toch één record weergegeven.
Nu mijn vraag: is dit eigenlijk standaard / of juist behavior ? Hoe gaan andere dbms'en hiermee om?
tblPersoon en tblAdres.
In tblPersoon heb je 1 record:
id: 1
naam: 'whoami'
in tblAdres heb je 1 record:
id: 1
persoonid: 1
straat: straat
Nu, als ik deze query uitvoer:
code:
1
2
3
4
| SELECT * FROM tblPersoon LEFT JOIN tblAdres ON tblPersoon.id = tblAdres.persoonid WHERE straat like 'stttt%' |
Dan krijg ik 0 records terug
Als ik deze query uitvoer:
code:
1
2
3
| SELECT * FROM tblPersoon LEFT JOIN tblAdres ON tblpersoon.id = tblAdres.persoonid AND straat like 'sttttt%' |
Dan krijg ik wel een record terug.
Eigenlijk had ik verwacht dat beide queries eenzelfde resultaat gingen teruggeven, maar blijkbaar is het niet zo.
Een verklaring is makkelijk: bij de eerste query wordt er eerst gejoined (left join), en dan worden de rows die niet aan de WHERE voldoen eruit gefiltert.
Bij de 2de query worden de rows uit tbladres gefiltert die niet aan de voorwaarde voldoen, en dan wordt er gejoined, en aangezien het een OUTER JOIN is, wordt er toch één record weergegeven.
Nu mijn vraag: is dit eigenlijk standaard / of juist behavior ? Hoe gaan andere dbms'en hiermee om?
https://fgheysels.github.io/