1

我无法为我拥有的用户评估表形成查询。

目前该表看起来像这样。

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

但这显然是不正确的。

任何帮助,将不胜感激。

4

2 回答 2

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
于 2012-10-11T18:33:29.857 回答
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

于 2012-10-11T18:33:08.890 回答