select music_name
from music_likes ml left join music m on ml.music_id = m.id
where user_id in(select follower_id from follow where user_id = 1)
    and music_id not in(select music_id from music_likes where user_id = 1)
group by music_id
order by music_id;

1.当distinct和order by 共用时要注意,如果orderby的是select中没有的列,此时DISTINCT 会去除结果集中的重复行,这可能会影响 ORDER BY 子句的排序依据。因此应该避免这种情况,那么如何避免呢?

可以采用group by的方式去重,从而避免使用distinct

2.不要一上来就将三张表联结在一起,可以观察表中的链式连接关系,从而逐步按需联结表

比如推荐用户id为1的用户关注的人以喜欢的音乐,此时可以从第二张表出发,使id在第一张的第二列,并使音乐id在第三张表的第一列。

3.另外,选出用户1喜欢的音乐时,也不必将三表连接,仅需从喜欢音乐的表中找到id——music_id即可