题解 | 网易云音乐推荐(网易校招笔试真题)
SELECT music_name FROM ( SELECT DISTINCT m.music_name, m.id FROM music_likes l LEFT JOIN music m ON m.id = l.music_id WHERE l.user_id IN ( SELECT follower_id FROM follow WHERE user_id = 1 ) AND l.music_id NOT IN ( SELECT DISTINCT music_id FROM music_likes WHERE user_id = 1 ) ) AS subquery ORDER BY id;
!:按照id排序,但是最后结果不显示id:
再在外面套一个子查询查名字就好了
坑:
1、DISTINCT
和 ORDER BY
不兼容,因为 m.id
没有出现在 SELECT
列表中,却在 ORDER BY
子句中使用。这是 MySQL 的限制:如果使用 DISTINCT
,ORDER BY
中的列必须也出现在 SELECT
列表中。
代码:
select distinct m. music_name
from music_likes l
left join music m on m.id=l.music_id
where user_id in(
select follower_id
from follow
where user_id=1
)
and music_id not in (
select distinct music_id
from music_likes
where music_likes.user_id=1
)
ORDER BY m.id;