# 请你编写一个SQL,查询向user_id = 1的用户,推荐其关注的人喜欢的音乐。
# 不要推荐该用户已经喜欢的音乐,并且按music的id升序排列。你返回的结果中不应当包含重复项。
-- 基本思路:按要求,选出user_id=1用户的关注者喜欢的音乐,并排除他自己喜欢的音乐
with
    s1 as (
        select
            user_id,
            music_id,
            music_name
        from
            music_likes
            left join music on music_id = id    -- 音乐id和音乐名一一对应连接起来,包含user_id组成一张大表s1
    ),
    s2 as (
        select
            user_id,
            music_id,
            music_name
        from
            s1
        where
            user_id in (
                select
                    follower_id
                from
                    follow f
                where
                    f.user_id = 1        -- user_id = 1 的用户的关注者喜欢的音乐s2
            )
    ),
    s3 as (
        select
            user_id,
            music_id,
            music_name
        from
            s1
        where
            user_id = 1        -- user_id = 1 的用户喜欢的音乐s3
    )
select
    music_name                 -- MySQL 的默认 SQL 模式(如 ONLY_FULL_GROUP_BY)要求:
from                           -- 如果使用了 DISTINCT,那么 ORDER BY 的列必须出现在 SELECT 列表中,否则会报错。
    (                          -- 如果必须按 musicid 排序但不想显示它,可以用子查询先过滤,再排序
        select distinct  
            music_id,
            music_name
        from
            s1
        where
            music_id in (
                select
                    music_id
                from
                    s2
            )
            and music_id not in(
                select
                    music_id
                from
                    s3
            )
    ) as temp           
order by
    music_id;