基于相同ID和不同类型的唯一记录

时间:2011-11-15 19:42:02

标签: sql

我有这样的第一张桌子:

ID    Email   

100  a@a.com  
200  b@b.com

我有这样的第二个表(权限共享):

   ID   Assigned ID  Role
   100    200        Normal user
   100    100        Super user
   200    200        Normal user 

即。 100是超级用户,可以访问ID 200的共享功能。

select t1.ID,t1.email,t2.role from table t1, table t2 where t1.ID=t2.ID;

当我结合前2个表时,我就是这样的

ID     Email      Role

100    a@a.com    Super  user 
100    a@a.com    Normal user
200    b@b.com    Normal user

我想得到这样的输出:

ID     Email      Role    
100    a@a.com    Super  user 
200    b@b.com    Normal user

即。如果任何用户具有超级用户权限类型,则只需获取该条目,并且不需要普通用户的类型。

如果电子邮件已作为超级用户出现,并且同一电子邮件被分配给某人,则该查询应仅返回给超级用户。

我甚至尝试过使用group by和union all:

  select t1.ID,t1.email,t2.role from table t1, table t2 
  where t1.ID=t2.ID group by t1.email having t2.role='Super user'
  and not exists (  select t1.ID,t1.email,t2.role from table t1, table t2 
  where t1.ID=t2.ID group by t1.email having t2.role='Super user')
  UNION ALL
  select t1.ID,t1.email,t2.role from table t1, table t2 
  where t1.ID=t2.ID group by t1.email having t2.role<>'Super user';

但似乎给出了错误的答案。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

“如果任何用户具有超级用户权限类型,只需获取该条目并且不需要普通用户的类型”:


select t1.ID,t1.email,t2.role 
from   table t1, table t2
where  t1.ID=t2.ID 
  and  t2.ID = t2.Assigned_ID

因为您不需要用户使用其他角色的结果。