2012-12-03 20 views
1

我有用戶表和user_group表。一個用戶可以在多個組中。我有兩組管理員和用戶。管理員組的組ID爲1,用戶組的組ID爲2.我選擇加入這兩個表。我想選擇它使用兩個表之間的連接:消除類似的行但具有特定的值

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

我得到管理員的每一行中兩次。我想在此查詢中刪除其他用於管理員的組,並將其作爲用戶(即1),我該如何實現此目的? sqlfiddlehere。組相關信息位於all_groups表中。

回答

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