Jag kan för mitt liv inte begripa mig på join. Jag har nu försökt att använda en SQL-designer men det har hittils gått åt fanken.
Jag har en fråga mot en databas som ser ut såhär:
SELECT art_pages.*, art_typ.*, art_artiklar.*, medlemsregister.*"&_
" FROM medlemsregister "&_
"INNER JOIN (art_typ INNER JOIN (art_artiklar INNER JOIN art_pages "&_
" ON art_artiklar.artId = art_pages.pagArtOrigin) ON art_typ.typId = art_artiklar.artTyp) ON medlemsregister.usrId = art_artiklar.artUsrID "&_
" WHERE art_pages.pagSida = 'nyheter' AND art_typ.typTyp = 'nyhet';
Nu vill jag hämta alla fälten art_bilder.* och med vilkoret
where art_bilder.bldParent = art_artiklar.artId
Jag knåpade ihop en variant som ser ut såhär:
SELECT art_pages.*,art_typ.*,art_artiklar.*,art_bilder.*,medlemsregister.*"&_
" FROM (((art_artiklar INNER JOIN art_pages ON art_artiklar.artId = art_pages.pagArtOrigin) INNER JOIN art_typ ON art_typ.typId = art_artiklar.artTyp) INNER JOIN medlemsregister ON medlemsregister.usrId = art_artiklar.artUsrID) INNER JOIN art_bilder ON art_bilder.bldParent = art_artiklar.artId WHERE art_pages.pagSida = 'nyheter' AND art_typ.typTyp = 'nyhet';
Men då fungerar inte vilkoren i slutet? Hur får jag in mina fält från art-bilder tabellen i den övre frågan?
Den nedersta frågan fungerar ju alldeles utmärkt men det som blir fel är att den inte returnerar något alls om det inte finns någon post i art_bild tabellen som är relaterad till art_arikel.artID... den bör den ju göra...?!
Nej, det bör den inte. Du har ju inner joins hela vägen, då kräver du ju att data ska finnas i alla tabeller. Byt till LEFT JOIN där du inte kräver att data ska finnas, och flytta villkoren från WHERE-satsen till JOIN-instruktionen.