Avatar billede esquimal Nybegynder
23. maj 2003 - 18:37 Der er 7 kommentarer og
1 løsning

Problemer med left join og where

Hej eksperter

Jeg sidder og roder med et mindre problem, som består i at jeg skal joine to tabeller, samtidig med en where clause skal opfyldes.

Hvis jeg bare joiner dem uden where betingelsen får jeg felterne som påregnet, altså jeg får også alle NULL felterne (p_p_g_id) fra product:

SELECT p_p_g_id, p_g_id, p_id, p_name
FROM product LEFT JOIN product_group ON product.p_p_g_id=product_group.p_g_id
ORDER BY p_g_name, p_name;

Hvis jeg bruger nedenstående join får jeg kun de felter som ikke er null ved join:

select p_p_g_id, p_g_id, p_id, p_name from product left join product_group on product.p_p_g_id = product_group.p_g_id where p_g_p_c_id = 3 order by p_g_name, p_name

Jeg har prøvet mig lidt frem med paranteser og "and" forskellige steder men kan ikke rigtig blive klog på det.

Så vidt jeg har forstået skal den vel left joine tabellerne først og derefter køre betingelsen på resultatet, men hvordan gør jeg det?
Avatar billede terry Ekspert
23. maj 2003 - 18:45 #1
use th equery builder it makes things easier.
Avatar billede esquimal Nybegynder
23. maj 2003 - 18:49 #2
Aner ikke hvordan man bruger den....men tak for forslaget
Avatar billede mortrr Praktikant
23. maj 2003 - 19:24 #3
Det lyder som om du vil have alle fra product, men kun dem fra product_group hvor p_g_p_c_id=3.
?

Så kan du flytte den ind i on:
select p_p_g_id, p_g_id, p_id, p_name from product left join product_group on product.p_p_g_id = product_group.p_g_id and p_g_p_c_id = 3 order by p_g_name, p_name
(Den kan man vist forresten ikke rigtigt bruge query-builder til)

Alternativt:
select p_p_g_id, p_g_id, p_id, p_name from product left join product_group on product.p_p_g_id = product_group.p_g_id WHERE p_g_p_c_id = 3 OR p_g_p_c_id is null order by p_g_name, p_name
Avatar billede inq Nybegynder
23. maj 2003 - 19:30 #4
Ja det er ikke altid nemt, jeg har modificeret det en smule, du kan helt sikkert få det til at passe..

SELECT product.p_p_g_id, product.p_g_id, product.p_id, product.p_name
FROM product INNER JOIN product_group ON product.ID = product_group.ID
WHERE (((product.p_p_g_id)="2"))
ORDER BY product.p_p_g_id;

Hilsner
Inq
Avatar billede inq Nybegynder
23. maj 2003 - 19:32 #5
du kan også omdøbe de række navne som product.p_p_g_id som fx. product.p_p_g_id as pID, så vil man bare skulle skrive pID istædet for de lange koder..

Håber mine indlæg hjalp
Inq
Avatar billede esquimal Nybegynder
23. maj 2003 - 19:39 #6
tak for forslagene, kigger lige lidt på det :O)
Avatar billede esquimal Nybegynder
23. maj 2003 - 21:21 #7
mortrr >>
Den første du foreslog skulle bare lige modificeres lidt så virkede det. Jeg havde i kampens hede glemt at jeg også havde et felt i product der referede til mit p_p_p_c_id. Det skulle lige med i queryen så virkede det:

select * from product left join product_group on (product.p_p_g_id = product_group.p_g_id and product_group.p_g_p_c_id = 3) where p_p_c_id = 3 order by p_g_name, p_name

Takker for hjælpen
Avatar billede inq Nybegynder
23. maj 2003 - 22:31 #8
dejligt at høre :)

/M
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester