SQL通过乘法值选择和过滤

时间:2014-08-16 19:57:49

标签: mysql sql select

你能帮我解决一下我的问题吗?

我有桌子:

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建议使用哪一个查询?

2 个答案:

答案 0 :(得分:3)

我建议将group byhaving子句一起使用。这是一个所谓的" 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