您可能會因爲DISTINCT
函數而得到您的查詢無效的印象。
想想你想要的輸出是什麼?你想要得到的所有的product_id其中attr_id是10,15或20。這意味着你需要以下ID:
id product_id attr_id
1 1 OK 10
2 1 OK 15
3 1 OK 20
4 2 NO 6
5 2 NO 9
6 3 OK 10
7 3 OK 15
8 3 OK 20
9 4 OK 15
所以如果沒有基本的查詢不同應該返回:
1, 1, 1, 3, 3, 3, 4
如果你使用不同的,你將獲得獨特的ID:
1, 3, 4
我相信這是你得到的。
有可能你想要「id」而不是「product_id」。
更新:
啊我現在可能是什麼問題。您期望獲得滿足所有3個條件的product_id。您不能使用IN
,因爲IN
會加入ID爲OR
的ID。您所寫的查詢可以改寫爲:
`SELECT DISTINCT(product_id) FROM tbl_product_rel WHERE attr_id = 10 OR attr_id = 15 OR attr_id = 20`.
如果您確定沒有重複項(即,2條記錄與attr_id = 20),您的解決方案將是
`SELECT product_id FROM tbl_product_rel WHERE attr_id IN (10, 15, 20) GROUP BY product_id HAVING count(*) = 3
但如果你允許重複,在這種情況下,這將不起作用,例如:
id product_id attr_id
1 1 10
2 1 20
3 1 20
你會得到1,但你不應該」噸(根據你的需要)。如果你允許這樣的場景,請讓我知道。
來源
2012-03-14 09:11:39
mkk
刪除不同的功能... – 2012-03-14 09:01:14
這是正確的查詢。發佈你的結果請 – mkk 2012-03-14 09:01:55
你不會得到他們,因爲他們共享相同的產品ids 1和3 – 2012-03-14 09:06:57