0

我有一个这样的 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。

这很容易使用“或”:

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

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

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

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

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

谢谢!

4

2 回答 2

4

像这样的东西怎么样:

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

请参阅带有演示的 SQL Fiddle

甚至:

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

于 2012-11-07T20:05:12.000 回答
0

另一种方法是使用连接,但仅基于第一个标准被限定为甚至不费心查看每个可能的实例......例如......

select 
      YT.InstanceID
   from 
      yourtable YT
         JOIN yourTable YT2
            on YT.InstanceID = YT2.InstanceID
            AND YT2.AnswerID = 25
   where 
      YT.answerid = 20
于 2012-11-07T20:13:01.490 回答