在映射表中只选择一条记录的查询
问题描述:
请问有人可以帮我解释一下可能的简单查询吗?在映射表中只选择一条记录的查询
我们有两个表结构如下。
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,因为它有多个角色。
有没有一个简单的查询来做到这一点?
非常感谢,提供任何帮助。
答
嗯,有几种方法可以做到这一点。
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
。
非常感谢,对于如此快速的反应 - 我会试试这个。 – user8232137
第二种解决方案非常适合我需要:-)谢谢! – user8232137