我们假设我有一张表格,用于存储产品及其类别之间的关系:
p_id | c_id
-----+-----
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3
3 | 2
如您所见,产品可能有多个类别。如何搜索分配了类别1和2的产品?我能想到的最接近的是使用JOIN:
SELECT a.p_id
FROM rel_table a
JOIN rel table b
ON a.p_id=b.p_id AND b.c_id=2
WHERE a.c_id=1
虽然这实现了我想要的,但它不实用,因为我的查询将是动态的。如果我必须选择包含3个类别的产品,则需要对查询进行难以更改。
是否有更清洁,更聪明的方法来实现这一目标?我想象选择第一组的东西,然后用另一个类别精炼所需的水平。
答案 0 :(得分:1)
你应该使用IN或Between来做这些事情。您可以动态创建放在IN/BETWEEN
SELECT a.p_id
FROM rel_table a
WHERE a.c_id IN (1,2,3)
group by a.p_id
having count(1) = 3
order by a.p_id asc
或
SELECT a.p_id
FROM rel_table a
WHERE a.c_id between 1 and 3
group by a.p_id
having count(1) = 3
order by a.p_id asc