mysql内连接查询3个表

时间:2015-02-11 14:48:15

标签: mysql

我在MySQL数据库中有一个名为'users'的表。用户的字段是:id,email,username,first_name,last_name。同一个MySQL DB中的另一个表名为“premium_users”,包含2个字段:user_id,premium_service_id。名为“premium_services”的第三个表包含2个字段:premium_service_id,premium_service_name。

我想创建一个SQL查询,以查询我的数据库,这样我就可以获得每个高级用户所拥有的高级服务的完整列表。我如何通过内连接正确查询?我试过这个:

select * from users in inner join premium_users on users.id = premium_users.user_id inner join premium_services on premium_users.premium_service_id = premium_services.premium_service_id;

1 个答案:

答案 0 :(得分:1)

由于您说哪个服务包含每个用户,因此您需要使用聚合来确定这一点。这是一种方式:

select user_id
from premium_users
group by user_id 
having count(*) = (select count(*) from premium_services)

根据您的数据,您可能需要count(distinct premium_service_id),但您应该有不允许在这些表格中重复的约束。

<击>

重读你的问题,我可能会倒退。看起来您想要一个高级服务列表而不是用户。同样的概念适用:

select ps.premium_service_id
from premium_services ps
  join premium_users pu on ps.premium_service_id = pu.premium_service_id
group by ps.premium_service_id
having count(distinct pu.user_id) = (select count(distinct user_Id) from premium_users)