本文主要是介绍每日一题-74(页面推荐),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题74:
根据下面两个表写一段 SQL 向user_id = 1 的用户,推荐其朋友们喜欢的页面。不要推荐该用户已经喜欢的页面,返回的结果中不应当包含重复项。
其中:
- Friendship表:这张表的主键是 user1_id, user2_id,这张表的每一行代表着 user1_id 和 user2_id 之间存在着朋友关系。
- Likes表:这张表的主键是 user_id, page_id,这张表的每一行代表着 user_id 喜欢 page_id。
解题思路:
(1)首先找出user_id = 1 的用户所有friends。通过 Friendship 可以得到所有的朋友;
select user2_id id from Friendship where user1_id = 1
select user1_id id from Friendship where user2_id = 1
(2)然后使用 UNION ALL 或者 UNION 连接上面两个查询得到所有的朋友 (UNION ALL 和 UNION 的区别在于前者会去掉重复的行,后者不会,这里使用前者更高效);
(3)最后再求 user_id = 1 like_page。这个也很简单,直接对表 Likes 使用 WHERE 语句即可。
select distinct page_id recommended_page
from Likes
where user_id in (select user2_id id from Friendship where user1_id = 1union allselect user1_id id from Friendship where user2_id = 1
) and page_id not in(select page_id from Likes where user_id =1
);
这篇关于每日一题-74(页面推荐)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!