您可能会因为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