1

userテーブルとuser_groupテーブルがあります。1人のユーザーが複数のグループに属することができます。adminとuserの2つのグループがあります。管理者グループのグループIDは1で、ユーザーグループのグループIDは2です。これら2つのテーブルの結合から選択します。2つのテーブル間の結合を使用して選択したいと思います。

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

各行で管理者を2回取得します。グループIDをユーザーとして持つadminの他の行、つまりこのクエリの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 に答える