你有一个sql查询,可以将第一个结果与第二个条件进行比较吗?

时间:2015-01-12 21:05:27

标签: sql postgresql

我的应用程序包含区域,城市,团队和用户。有8种默认用户类型或帐户类型(即用户,超级用户,系统管理员,只读用户等)。我需要找到至少包含其中一种默认帐户类型的区域。所有这些帐户必须来自同一地区。例如:

 SELECT users.region FROM users WHERE users.role='System Administrator' 
 OR users.role='Power User' 
 OR users.role='User' 
 OR users.role='Read Only' AND users.region = users.region;

当然,这不会奏效。如何确保查询确保所有用户角色(帐户类型)来自同一区域?

2 个答案:

答案 0 :(得分:6)

如果有八种类型,那么这将返回全部八种类型的区域:

select u.region
from users u
group by u.region
having count(distinct u.role) = 8;

这假设u.role只有"默认"值。如果其他值可以输入,请使用where

select u.region
from users u
where u.role in ('System Administrator', . . . )
group by u.region
having count(distinct u.role) = 8;

答案 1 :(得分:0)

我会尝试加入所需数量的查询

Select a.region from
(SELECT users.region region FROM users WHERE users.role='System Administrator') a,
(SELECT users.region region FROM users WHERE users.role='Power User') b,
(SELECT users.region region FROM users WHERE users.role='User') c,
(SELECT users.region region FROM users WHERE users.role='Read Only') d
where a.region=b.region=c.region=d.region