我有这样的第一张桌子:
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';
但似乎给出了错误的答案。有什么想法吗?
答案 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
因为您不需要用户使用其他角色的结果。