-- 链接 LINK: https://www.nowcoder.com/practice/048ed413ac0e4cf4a774b906fc87e0e7?tpId=82&tqId=38864&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=undefined&judgeStatus=undefined&tags=&title=
-- 标题 TITLE: SQL287 网易云音乐推荐(网易校招笔试真题)
-- 日期 DATE: 2023-02-25

/* 设计思路

**/

-- 题解 SQL
SELECT T2.music_name
FROM (
    SELECT user_id, follower_id FROM follow
    WHERE user_id = 1
) T1
INNER JOIN (
    SELECT TA.music_id, TB.music_name, TA.user_id FROM music_likes TA
    INNER JOIN music TB ON TA.music_id = TB.id
) T2 ON T2.user_id = T1.follower_id
LEFT JOIN music_likes T3 ON T3.user_id = T1.user_id AND T3.music_id = T2.music_id
WHERE T3.music_id IS NULL
GROUP BY T2.music_id, T2.music_name
ORDER BY T2.music_id

;

-- 数据 DATA ===================================================
DROP TABLE IF EXISTS follow;

DROP TABLE IF EXISTS music_likes;

DROP TABLE IF EXISTS music;
CREATE TABLE `follow` (
`user_id` int(4) NOT NULL,
`follower_id` int(4) NOT NULL,
PRIMARY KEY (`user_id`,`follower_id`));

CREATE TABLE `music_likes` (
`user_id` int(4) NOT NULL,
`music_id` int(4) NOT NULL,
PRIMARY KEY (`user_id`,`music_id`));

CREATE TABLE `music` (
`id` int(4) NOT NULL,
`music_name` varchar(32) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO follow VALUES(1,2);
INSERT INTO follow VALUES(1,4);
INSERT INTO follow VALUES(2,3);

INSERT INTO music_likes VALUES(1,17);
INSERT INTO music_likes VALUES(2,18);
INSERT INTO music_likes VALUES(2,19);
INSERT INTO music_likes VALUES(3,20);
INSERT INTO music_likes VALUES(4,17);

INSERT INTO music VALUES(17,'yueyawang');
INSERT INTO music VALUES(18,'kong');
INSERT INTO music VALUES(19,'MOM');
INSERT INTO music VALUES(20,'Sold Out');