2011-04-01 26 views
2

我敢肯定這很簡單,但我的大腦今天不工作!MySQL加入轉發問題

我有一個表products,讓我們姑且認爲它包含p_id,我還有一個表 - 透視表 - 這products和另一臺attributes之間的引用,這個表是products_to_attributes幷包含pta_aid(ID屬性)和pta_pid(產品ID)

希望這(不正確)的查詢將顯示什麼我想要做的比我能解釋一下:

SELECT `p_id` FROM `products` 
LEFT JOIN `products_to_attributes` ON (`pta_pid` = `p_id`) 
WHERE ((`pta_aid` = '1' OR `pta_aid` = '2') AND(`pta_aid` = '3')) 

我希望能夠組合在一起的屬性,其中一個產品必須具有屬性1或屬性2和具有屬性3.

+2

同一行中的相同字段不能有兩個值 – 2011-04-01 11:25:54

回答

2

如果我正確理解你的需要,你很可能有兩個EXISTS子句:

SELECT p_id FROM products PR 
WHERE EXISTS (SELECT p_id FROM products_to_attributes WHERE (pta_aid = 1 OR pta_aid=2) AND pta_pid=PR.p_id) 
AND EXISTS (SELECT p_id FROM products_to_attributes WHERE pta_aid = 3 AND pta_pid=PR.p_id) 
+0

這看起來可行,只是對我的數據集進行測試 – robjmills 2011-04-01 11:41:46

0
SELECT p.`p_id` FROM `products` p 
LEFT JOIN `products_to_attributes` pta ON (p.`p_id` = pta.`pta_pid`) 

名稱表,並指定哪個字段來自哪個表。然而,一個字段如何可以連續成爲1和3?在where子句中有一個邏輯問題。

+0

我欣賞邏輯問題,但我的代碼基本上是僞代碼來解釋問題 – robjmills 2011-04-01 11:34:34