2017-06-29 90 views
1

请问有人可以帮我解释一下可能的简单查询吗?在映射表中只选择一条记录的查询

我们有两个表结构如下。

Customer表:

+----+-----------+ 
| id | name | 
+----+-----------+ 
| 1 | customer1 | 
| 2 | customer2 | 
| 3 | customer3 | 
+----+-----------+ 

Customer role映射表:

+-------------+-----------------+ 
| customer_id | customerRole_id | 
+-------------+-----------------+ 
|   1 |    1 | 
|   1 |    2 | 
|   2 |    1 | 
|   3 |    1 | 
|   4 |    1 | 
|   5 |    1 | 
+-------------+-----------------+ 

我想与角色ID仅1不与角色ID为1,2,选择客户

所以,这种情况下,它将是客户ID 2,3,4 & 5.忽略1,因为它有多个角色。

有没有一个简单的查询来做到这一点?

非常感谢,提供任何帮助。

回答

2

嗯,有几种方法可以做到这一点。

select c.* 
from customers c 
where exists (select 1 from mapping m where m.customerid = c.id and m.role = 1) and 
     not exists (select 1 from mapping m where m.customerid = c.id and m.role <> 1); 

如果你只是想客户ID,一个简单的也许是版本:

select customerid 
from mapping 
group by customerid 
having min(role) = 1 and max(role) = 1; 

此解决方案假定role从未NULL

+0

非常感谢,对于如此快速的反应 - 我会试试这个。 – user8232137

+0

第二种解决方案非常适合我需要:-)谢谢! – user8232137

相关问题