Mysql 复杂的内连接场景
Mysql complicated Inner join scenario
table 包含员工和他们为之工作的客户。
employee
client
a
1
a
4
b
2
c
1
c
2
d
3
我需要找一个只为一个客户工作的员工,这个客户是特殊客户=2
因此结果应该是“b,2”,因为“b”和“d”只是为一个客户工作的员工,但应该预期“b”是因为他为客户=2工作而“d”不是
预期结果:
employee
client
b
2
结果不应包含“c”,因为“c”适用于 client=2 但也适用于另一个 client=1
我尝试了以下查询,它 returns 所有只为一个客户(所有客户中的任何一个)工作但不确定如何强加客户的员工应该是“2”
SELECT COUNT(*),employee FROM employee_client GROUP BY emplyoee HAVING COUNT(*) = 1;
您需要在 HAVING
子句中进行条件聚合:
SELECT employee, MAX(client) client
FROM employee_client
GROUP BY employee
HAVING COUNT(*) = 1 AND SUM(client <> 2) = 0;
参见demo。
table 包含员工和他们为之工作的客户。
employee | client |
---|---|
a | 1 |
a | 4 |
b | 2 |
c | 1 |
c | 2 |
d | 3 |
我需要找一个只为一个客户工作的员工,这个客户是特殊客户=2 因此结果应该是“b,2”,因为“b”和“d”只是为一个客户工作的员工,但应该预期“b”是因为他为客户=2工作而“d”不是
预期结果:
employee | client |
---|---|
b | 2 |
结果不应包含“c”,因为“c”适用于 client=2 但也适用于另一个 client=1
我尝试了以下查询,它 returns 所有只为一个客户(所有客户中的任何一个)工作但不确定如何强加客户的员工应该是“2”
SELECT COUNT(*),employee FROM employee_client GROUP BY emplyoee HAVING COUNT(*) = 1;
您需要在 HAVING
子句中进行条件聚合:
SELECT employee, MAX(client) client
FROM employee_client
GROUP BY employee
HAVING COUNT(*) = 1 AND SUM(client <> 2) = 0;
参见demo。