[英]Selecting records from one table
我有下表(tbl_product_rel):
id product_id attr_id
1 1 10
2 1 15
3 1 20
4 2 6
5 2 9
6 3 10
7 3 15
8 3 20
9 4 15
我想獲取具有完全等於10、15、20的attr_id的product_id。 如果我使用MySQL IN
從
tbl_product_rel
attr_id IN(10,15,20)中選擇DISTINCT(product_id)
所以我也得到了attr_id等於15的product_id,但沒有attr_ids 10和20。
有任何想法嗎 ?
您可以使用這樣的查詢,但我不知道這是否是最佳解決方案:)
SELECT * FROM tbl_product_rel WHERE attr_id IN (10,15,20) GROUP BY product_id HAVING COUNT(product_id) = 3
您可能會覺得查詢不起作用的原因可能是由於DISTINCT
函數。
想想您想要的輸出是什么? 您需要獲取attr_id為10、15或20的所有product_id。這意味着您需要以下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
聯接在一起。 您編寫的查詢可以重寫為:
`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,但您不應該得到1(根據您的需要)。 請讓我知道是否允許這種情況。
聽起來您只需要具有所有三個屬性ID的product_id。 您可以通過一些丑陋的子查詢來做到這一點:
SELECT DISTINCT(product_id) FROM tbl_product_rel
WHERE product_id IN
(SELECT product_id FROM tbl_product_rel WHERE attr_id=10)
AND product_id IN
(SELECT product_id FROM tbl_product_rel WHERE attr_id=15)
AND product_id IN
(SELECT product_id FROM tbl_product_rel WHERE attr_id=20)
您還可以進行一些更丑陋的聯接。
刪除獨特的功能:
SELECT product_id FROM tbl_product_rel WHERE attr_id IN (10,15,20)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.