分享一下解题思路,一步步拆解问题
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;
最后附上通过图