分享一下解题思路,一步步拆解问题

1、 先找出user_id=1的人关注的人的id

select follower_id
from follow
where user_id =1;

2、 查找关注人喜欢的音乐名

select m2.music_name
from music_likes m1
join music m2 on m1.music_id=m2.id
where m1.user_id in(select follower_id
                    from follow
                    where user_id =1)

3、 查找user_id=1的用户已经喜欢的音乐名

select music_name
from music_likes m3
join music m4 on m3.music_id=m4.id
where m3.user_id=1;

4、在关注人喜欢的音乐当中去除用户已经喜欢的音乐,由于distinct与order by 一起用貌似不行,所以咱们再查询一边就行。

select a.music_name
from(
    select distinct m2.music_name,m2.id
    from music_likes m1
    join music m2 on m1.music_id=m2.id
    where m1.user_id in(select follower_id
                        from follow
                        where user_id =1)
    and m2.music_name not in(select music_name
                             from music_likes m3
                             join music m4 on m3.music_id=m4.id
                             where m3.user_id=1)) a
order by a.id;

最后附上通过图

alt