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       |
+----+------------+----------+

特定の条件下でインスタンス ID を取得したいと考えています。

これは「OR」を使用すると簡単です。

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

ただし、「AND」はそれほど単純ではありません。条件が各インスタンス ID ではなく、個々の行に適用されるからです。

たとえば、2,3 を返す必要がある (answerID = 20 AND answerID = 25) の instanceID を取得したいと思います。

テーブルが biIIIig であるため、WHERE x IN (サブクエリ) のようなサブクエリを避ける必要があります。

これは検索エンジンで検索するのが難しい概念なので、ここで質問することにします。

ありがとう!

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

もう1つは、結合を使用することですが、最初の基準にのみ基づいており、考えられるすべてのインスタンスをわざわざ調べないようになっています。

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 に答える