1

我有用户表和 user_group 表。单个用户可以在多个组中。我有两个组管理员和用户。管理员组的组 ID 为 1,用户组的组 ID 为 2。当我选择加入这两个表时。我想使用两个表之间的连接来选择它:

select * from users u
join user_groups ug
on u.user_id = ug.user_id;

我在每行中两次获得管理员。我想在此查询中以组 id 为用户即 1 的管理员消除其他行,我该如何实现?sqlfiddle这里。_ 组相关信息在 all_groups 表中。

4

1 回答 1

1

假设您要保留具有最大值的group_id

select *
  from (select u.user_id,
               u.username,
               u.first_name,
               u.middle_name,
               u.last_name,
               u.password,
               ug.group_id,
               rank() over (partition by ug.user_id
                                order by ug.group_id desc) rnk
          from users u
               join user_groups ug
                 on u.user_id = ug.user_id)
 where rnk = 1;

应该管用。这是sqlfiddle

于 2012-12-03T07:18:23.703 回答