记录过滤问题

时间:2014-03-22 05:23:14

标签: sql rdbms

我在数据库中有2个表:1。代理表& 2. UserPermissions表

表1代理商包含以下给出的代理商列表;这里有公司ID& AgentID是唯一值。

AgentID  AgentCode CompanyID RailEnabled  
1             A1        1          1  
2             A2        2          0  
3             A3        3          1  
4             A4        4          0  

表2 UserPermissions表包含来自特定代理的所有用户的列表。还有2个字段ModuleCode,其值类似于' RAL'对于简短的Rail和Enabled字段。

UserID UserName ModuleCode Enabled CompanyID

1   U1  RAL 1   1  
2   U2  RAL 0   1  
3   U3  RAL 1   1  
13  U4  BUS 1   1  
4   U1  RAL 0   2  
5   U2  RAL 0   2  
6   U3  RAL 0   2  
14  U4  HTL 1   2  
7   U1  RAL 0   3  
8   U2  RAL 0   3  
9   U3  RAL 0   3  
15  U4  FLT 1   3  
10  U1  RAL 0   4  
11  U2  RAL 0   4  
12  U3  RAL 0   4  
16  U4  BUS 1   4  
 

现在我只需要过滤掉RailEnabled为true的代理,但没有为该代理的任何用户启用Rail服务(模块代码:RAL)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用NOT EXISTS。

SQLFiddle

select * from agents a
where railenabled = 1     --assuming 1 means enabled
and not exists (select 1  --not exists to remove all agents whose users have RAL enabled
                from userpermissions b
                where a.companyid = b.companyid
                and b.modulecode = 'RAL'
                and b.enabled = 1
                );