2011-07-18 101 views
2

我已經開始學習SQL現在和現在我的問題: 看看我上傳的圖像,並告訴我如何過濾所有產品categorys與id_product = 45,我的返回值是45-3 ,45-2和產品組的第1行。合併兩個SQL表的條件

還是那句話:我將所有product_groups行(1,2,3)和相關id_category(PRODUCT_CATEGORY)與id_product = 45

這並不容易解釋,SRY我的英文不好..

The two SQL Tables

這裏是一個SQL查詢誰給所有的行與product_groups ID和id_product = 45而不是ID = 3的空值:-(

SELECT 
    id, title, multiplayer, id_product 
FROM 
    product_category 
RIGHT OUTER JOIN products_groups ON 
    rg_product_category.id_category = products_groups.id 
WHERE 
    product_category.id_product = '45' OR 
    product_category.id_product IS NULL AND products_groups.type = 'Game'; 

感謝您的所有幫助

+1

一個看起來像你缺少周圍product_category.id_product括號IS NULL和products_groups.type =「遊戲」 – plague

+0

是否產品組3有型「遊戲」?另外,考慮翻轉你的查詢。通常認爲左連接比右連接更容易閱讀。 – Simon

+0

是的,產品組的列類型具有「遊戲」類型。看看圖片:-) – Patrik

回答

4

我想我明白你想要什麼:你想列出所有的product_groups,如果沒有匹配,則用null值。試試這個:

SELECT 
    id, title, multiplayer, id_product 
FROM products_groups 
LEFT JOIN product_category 
    ON product_category.id_category = products_groups.id 
    AND product_category.id_product = '45' 
WHERE products_groups.type = 'Game'; 
+0

嘿,這個查詢沒有來自表「product_groups」的值id =「3」。我需要id =「3」在我的結果表中。查詢的其餘部分是正確的。 – Patrik

+0

@Bohemian:反轉'FROM products_groups LEFT JOIN product_category' –

+0

Opps - thx @ypercube! – Bohemian