我有一个像这样的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。
这是一个难以在搜索引擎中搜索的概念,所以我在这里求助。
谢谢!
答案 0 :(得分:4)
这样的事情怎么样:
select instanceid
from yourtable
where answerid in (20, 25)
group by instanceid
having count(distinct answerID) > 1
甚至:
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
答案 1 :(得分:0)
另一个是通过使用连接,但仅基于第一个标准被限定为甚至不打扰查看每个可能的实例...例如......
select
YT.InstanceID
from
yourtable YT
JOIN yourTable YT2
on YT.InstanceID = YT2.InstanceID
AND YT2.AnswerID = 25
where
YT.answerid = 20