SQL 计算共同的多对多关系

SQL count many-to-many relations in common

我对此架构有 sql 问题:

table user(id, name) table page(id, name) table page_user(id_page, id_user)

一个页面可以被多个用户点赞,一个用户可以点赞多个页面

我想 select 我 table 中的所有用户都有一个列,其中包含与某些固定用户相同的喜欢页面的数量 像 : id_user | page_in_common_with_user_#id#_count

您可以通过以下查询轻松完成:

select id_user , count(id_page)
from user left outer join page_user on user.id = page_user.id_user
group by id_user

假设"liked page"指的是page_usertable,那么你可以使用自联接:

select pu.id_user, count(pux.id_page) as PagesInCommonWithX
from page_user pu left join
     page_user pux
     on pu.id_page = pux.id_page and
        pux.id_user = $x
group by pu.id_user;