23. maj 2003 - 18:37Der 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?
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
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;
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
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.