2013-11-26 105 views
1

我有問題與SQL查詢。我需要加入3個表,其中2個子句。加入3表和2 where子句

第一個表是:

new_product_to_category

product_id|category_id 
3|1507 
3|1507 
4|1507 

二是:

new_product_to_store

product_id|store_id 
3|2 
3|3 
4|2 

最後一個:

new_product_description

product_id|name 
3|something 
4|something2 

和查詢看起來像

SELECT pts.product_id, pd.name FROM new_product_to_category ptc 
       LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id AND pts.store_id = 3 
       LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id 
       WHERE ptc.category_id = 1507 

我需要得到僅與在類別1507並從商店3個產品導致...是可能的?感謝您的答覆

回答

0

試試這個:

SELECT pts.product_id, pd.NAME 
FROM new_product_to_category ptc 
LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id 
LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id 
WHERE ptc.category_id = 1507 
    AND pts.store_id = 3 

有在驗證WHERE子句將讓這個你new_product_to_category得到所有的記錄,從new_product_to_store和new_product_description它可以找到(所有信息LEFT JOIN),最後限制爲與WHERE子句匹配的那些。

通過具有ON子句中的驗證,你就會讓這個從表中的產品得到所有的值,但只有從new_product_to_store對於已STORE_ID的那些= 3

試圖既內容在sqlfiddle中查詢,您可以在執行SELECT *時看到區別,並且可以看到爲什麼您的查詢會有更多結果。

編輯: 有STORE_ID也new_product_to_category你也應該是驗證添加到ON子句(ptc.store_id = pts.store_id):

SELECT * 
FROM new_product_to_category ptc 
LEFT JOIN new_product_to_store pts ON pts.product_id = ptc.product_id 
    AND ptc.store_id = pts.store_id 
LEFT JOIN new_product_description pd ON pts.product_id = pd.product_id 
WHERE ptc.category_id = 1507 
    AND pts.store_id = 3; 

sqlfiddle demo

+0

我犯的錯誤。 new_product_to_category表有另一個store_id列,因此它看起來像這樣[link] http://sqlfiddle.com/#!2/356846/1 並且它返回2個相同的產品。其次是正確的,但第一個與類別1507 id 3,但從商店與id 2是wron – Shanoy

+0

你想要它做什麼? –

+0

檢查我編輯的評論。我只需要從商店3和類別1507的產品... – Shanoy