你能帮我解决一下我的问题吗?
我有桌子:
id | party_id | tag_id
_______|__________|__________
1 | 5 | 1
2 | 5 | 2
3 | 5 | 3
4 | 7 | 1
5 | 7 | 6
6 | 7 | 8
7 | 7 | 9
8 | 9 | 7
9 | 9 | 6
我需要得到一个表格,其值与parties_id
相同,是严格传递的标签(如过滤):
示例:
tag_id = 1 and 3
我应该得到:
party_id = 5
问题是我无法使用WHERE IN
因为OR
运算符,但我需要AND
您对此SELECT
建议使用哪一个查询?
答案 0 :(得分:3)
我建议将group by
与having
子句一起使用。这是一个所谓的" set-within-sets"查询。这是一个例子:
select party_id
from table t
group by party_id
having sum(tag_id = 1) > 0 and sum(tag_id = 3) > 0;
having
子句中的每个条件都会计算给定party_id
的特定类型的标记数。 > 0
确保至少存在一个。
答案 1 :(得分:1)
你是对的,IN
运营商不能要求匹配右侧列表中的所有内容,但您可以AND
多个IN
表达式。
SELECT DISTINCT party_id
FROM testtable
WHERE
party_id IN (SELECT party_id FROM testtable WHERE tag_id = 1)
AND party_id IN (SELECT party_id FROM testtable WHERE tag_id = 3);
SQLFiddle:http://sqlfiddle.com/#!2/8b4a15/1/0