楼主: bleuz
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 一道Facebook DS SQL题

 
🔗
hazel712 2018-8-14 11:15:20 | 只看该作者
全局:
sunflowerslj 发表于 2018-7-16 12:31
I would try to use left outer join.
Suppose you have two tables:
a

感觉最后一行where 有点问题?要选的是b.user_id  没有读过的那些page
这样的话就变成了选从来没有读过page的user(b.pages is null)
请指教

评分

参与人数 1大米 +3 收起 理由
Georgeapex + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
hazel712 2018-8-14 11:18:46 | 只看该作者
全局:
kela0011 发表于 2018-7-22 09:57
Does this work?

Select f.user_id, p.pg

第二个应该是left join而不是inner join?

评分

参与人数 1大米 +3 收起 理由
Georgeapex + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
sunflowerslj 2018-8-15 00:44:18 | 只看该作者
全局:
hazel712 发表于 2018-8-14 11:15
感觉最后一行where 有点问题?要选的是b.user_id  没有读过的那些page
这样的话就变成了选从来没有读过p ...

table t 里面装的是用户和他的朋友喜欢的page,但是没有去掉如果这些pages用户本身就喜欢的这个情况。left outer join 再配合b.pages is null 可以保证如果用户本身就喜欢这个page,那让最后结果去掉这些page。
回复

使用道具 举报

🔗
hazel712 2018-8-15 01:28:23 | 只看该作者
全局:
sunflowerslj 发表于 2018-8-15 00:44
table t 里面装的是用户和他的朋友喜欢的page,但是没有去掉如果这些pages用户本身就喜欢的这个情况。lef ...

不好意思,麻烦再问一下t table left outer join b 之后是什么样的?我觉得on的条件是不是应该加一个:ON t.user_id = b.user_id and t.pages=b.pages (朋友喜欢的和他喜欢的一样) 然后再用 WHERE b.pages is null。这样就可以保证如果用户本身就喜欢这个page,那让最后结果去掉这些page

谢谢

评分

参与人数 1大米 +3 收起 理由
Georgeapex + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
sunflowerslj 2018-8-16 00:36:51 | 只看该作者
全局:
hazel712 发表于 2018-8-15 01:28
不好意思,麻烦再问一下t table left outer join b 之后是什么样的?我觉得on的条件是不是应该加一个:ON ...

嗯,对的,我应该是漏了一个page也要join才行。
回复

使用道具 举报

🔗
sunflowerslj 2018-8-16 00:38:05 | 只看该作者
全局:

I would try to use left outer join.
Suppose you have two tables:
a
user_id     friend_id
b
user_id     pages

SELECT t.user_id, t.pages
FROM
           (SELECT distinct a.user_id, b.pages
            FROM a INNER JOIN b
            ON a.friend_id = b.users ) t
LEFT OUTER JOIN b
ON t.user_id = b.user_id
AND t.pages=b.pages
WHERE b.pages is null
回复

使用道具 举报

🔗
scorpiofay 2018-12-11 12:54:54 | 只看该作者
全局:
为啥大家都写得这么复杂?我怎么觉得一个EXCEPT就可以了啊。。。

SELECT T1.UID, T2.LIKED_PID
FROM friends as T1 JOIN likes as T2 ON T1.FID = T2.UID
EXCEPT
SELECT UID, LIKED_PID
FROM likes

难道是我想错了?
回复

使用道具 举报

🔗
huixingzhijia 2019-1-19 06:34:12 | 只看该作者
全局:
select user_id,page_id from
(SELECT distinct a.user_id,b.page_id
FROM friend_table a
INNER JOIN page b
ON a.friend_id = b.user_id
left join
page p
on a.user_id=p.user_id
where b.page_id!=p.page_id) tmp
where (user_id,page_id) not in (select user_id, page_id from page)
order by user_id,page_id
回复

使用道具 举报

🔗
huixingzhijia 2019-1-19 06:54:19 | 只看该作者
全局:
可以简化 思路是先找出他的小伙伴喜欢的post, 之后这里面除去自己喜欢的post. 就行
select user_id,page_id from
(SELECT distinct a.user_id,b.page_id
FROM friend_table a
INNER JOIN page b
ON a.friend_id = b.user_id
) tmp
where (user_id,page_id) not in (select user_id, page_id from page)
order by user_id,page_id
回复

使用道具 举报

🔗
AuroraXue 2019-5-4 23:19:39 | 只看该作者
全局:
select user_id, page_like as recommend_page
from(
select a.*, b.page_like as user_page_like from (
select a.*, b.page_like
from user a
left join page b
on a.frieds_id = b.user_id) a
left join page b
on a.user_id = b.user_id)
where page_like <> user_page_like;

How about this one?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表