从一个表中选择记录
我有如下表(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
我想这有attr_ids正好等于10,15,20 product_ids。如果我使用MySQL在
SELECT DISTINCT(产品)FROM
tbl_product_rel
WHERE attr_id IN (10,15,20)
,所以我得到同样的product_id已attr_id等于15,但它确实没有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
删除独特的功能:
SELECT product_id FROM tbl_product_rel WHERE attr_id IN (10,15,20)
这听起来像你想只有具有全部三个属性ID的产品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)
你也可以做一些丑陋的连接。
您可能会因为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:01:14
这是正确的查询。发布你的结果请 – mkk 2012-03-14 09:01:55
你不会得到他们,因为他们共享相同的产品ids 1和3 – 2012-03-14 09:06:57