多行的MySQL条件

时间:2012-11-07 19:59:56

标签: mysql

我有一个像这样的MySQL表:

+----+------------+----------+
| id | instanceID | answerID |
+----+------------+----------+
| 1  | 1          | 10       |
| 2  | 1          | 12       |
| 3  | 1          | 20       |
| 4  | 2          | 12       |
| 5  | 2          | 20       |
| 6  | 2          | 22       |
| 7  | 2          | 25       |
| 8  | 3          | 20       |
| 9  | 3          | 25       |
| 10 | 4          | 12       |
| 11 | 4          | 20       |
+----+------------+----------+

我想在某些条件下检索instanceID。

使用'OR'很容易:

SELECT instanceID FROM table WHERE (answerID = 10 OR answerID = 12) GROUP BY instanceID;
Returns:
1,2,4

但是,'AND'并不是那么简单,因为条件应用于每个单独的行,而不是每个instanceID。

例如,我想检索instanceID,其中(answerID = 20 AND answerID = 25) 哪个应该返回2,3

我需要避免像WHERE x IN(子查询)这样的子查询,因为该表是biIIIIig。

这是一个难以在搜索引擎中搜索的概念,所以我在这里求助。

谢谢!

2 个答案:

答案 0 :(得分:4)

这样的事情怎么样:

select instanceid
from yourtable
where answerid in (20, 25)
group by instanceid
having count(distinct answerID) > 1

请参阅SQL Fiddle with Demo

甚至:

select instanceid
from yourtable
where answerid in (20, 25) -- list of values here
group by instanceid
having count(distinct answerID) = 2 -- match the count of the values here

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

另一个是通过使用连接,但仅基于第一个标准被限定为甚至不打扰查看每个可能的实例...例如......

select 
      YT.InstanceID
   from 
      yourtable YT
         JOIN yourTable YT2
            on YT.InstanceID = YT2.InstanceID
            AND YT2.AnswerID = 25
   where 
      YT.answerid = 20