因此我们有以下电影评级关系数据库:
mysql> select * from ratings;
+-----+-----+------+
| uid | mid | rid |
+-----+-----+------+
| u1 | m1 | 4 |
| u1 | m2 | 3 |
| u2 | m2 | 5 |
| u2 | m3 | 4 |
| u3 | m1 | 4 |
| u3 | m2 | 5 |
| u3 | m3 | 2 |
+-----+-----+------+
7 rows in set (0.03 sec)
因此,我们希望找到对至少 2 部常见电影(由特定用户“u1”评分的电影)进行过评分的所有用户。换句话说,如果用户“u1”对电影 m1、m2、m3 进行了评分,我们需要所有其他也对电影 m1、m2、m3 中至少 2 部进行评分的用户 ID。
所以在这种情况下,答案应该是 u3,因为 u3 已对 m1、m2、m3 进行了评分,其中包括 2 部带有“u1”的常见电影。我尝试了以下语句:
mysql> SELECT *
FROM ratings
WHERE mid IN (SELECT mid FROM ratings WHERE uid='u1');
+-----+-----+------+
| uid | mid | rid |
+-----+-----+------+
| u1 | m1 | 4 |
| u1 | m2 | 3 |
| u2 | m2 | 5 |
| u3 | m1 | 4 |
| u3 | m2 | 5 |
+-----+-----+------+
5 rows in set (0.00 sec)
所以,这给了我与用户 u1 一样的常见电影的所有评分。现在,我如何才能只获取那些与 u1 至少有 2 个共同条目的条目?
最佳答案
SELECT R.uid from ratings R
JOIN
(SELECT distinct mid
FROM ratings
WHERE uid='u1') T
ON R.mid = T.mid
group by R.uid
having count(R.mid) = 2;
+-----+
| uid |
+-----+
| u1 |
| u3 |
+-----+
2 rows in set (0.15 sec)
关于mysql - 复杂查询: find all users who rated at least 2 common movies rated by u1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111602/