MySQL查询检查用户评估

时间:2012-10-11 18:31:09

标签: mysql

我在查询我的用户评估表时遇到问题。

目前该表看起来像这样。

+-----+----------+----------+
| id  | video_id | user_id  |
+-----+----------+----------+
| 1   |       1  |        1 |
| 2   |       2  |       50 |
| 3   |       1  |      115 |
| 4   |       2  |       25 |
| 5   |       2  |       1  |
| 6   |       6  |       98 |
| 7   |       3  |        1 |
+-----+----------+----------+

我遇到的问题是形成一个查询,该查询返回已观看video_id为1,2和3的人的user_id。因此,在上面的示例中,只应返回user_id 1。

我想做像

这样的事情
SELECT user_id 
    FROM user_assessment 
    WHERE video_id = '1' AND video_id = '2' AND video_id = '3'

但这显然是不正确的。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

这里的关键是HAVING子句(3)中检查的值等于IN分组中包含的元素数。这可以保证包含所有三个视频。

SELECT user_id
    FROM user_assessment
    WHERE video_id IN (1, 2, 3)
    GROUP BY user_id
    HAVING COUNT(DISTINCT video_id) = 3

答案 1 :(得分:2)

SELECT user_id 
FROM user_assessment
WHERE video_id IN (1, 2, 3)
GROUP BY user_id
HAVING COUNT(video_id) = 3

这假设您没有重复的每个用户的video_id