gpt4 book ai didi

mysql - SQL Select至少有2个订单且其中至少有一个在某区的员工,无嵌套SQL block

转载 作者:行者123 更新时间:2023-11-29 05:08:13 26 4
gpt4 key购买 nike

我有两个表,'Customers' 和 'Employees' 连接到第三个表 'Orders'

| CustomerID | CDistrict |    | EmployeeID | EName |
|------------|-----------| |------------|-------|
| 1 | A | | 1 | Alex |
| 2 | A | | 2 | Bob |
| 3 | B | | 3 | Edd |
| 4 | C |

| OrderID | CustomerID | EmployeeID |
|---------|------------|------------|
| 1 | 1 | 1 |
| 2 | 3 | 1 |
| 3 | 3 | 2 |
| 4 | 5 | 2 |
| 5 | 1 | 3 |

如何选择至少服务过 2 个订单的所有员工的姓名,其中至少有一个来自地区“A”的客户没有嵌套 SQL block ?也就是说,结果应该是“Alex”。

我设法通过嵌套查询做到了这一点,如下所示:

SELECT EName FROM Database.Employees
WHERE
EmployeeID IN
(SELECT EmployeeID FROM Database.Orders
GROUP BY EmployeeID
HAVING COUNT(*) >= 2)
AND
EmployeeID IN
(SELECT EmployeeID FROM Database.Orders
WHERE
CustomerID IN
(SELECT CustomerID FROM Database.Customers
WHERE CDistrict = 'A'));

但是,我需要在没有嵌套查询的情况下执行此操作。我选择至少服务过 2 个订单的所有员工的查询如下所示:

SELECT EName FROM Database.Employees, Database.Orders
WHERE
Employees.EID = Orders.EID
GROUP BY EName HAVING COUNT(OrderID) >=2
ORDER BY EName;

我的查询选择了所有为地区“A”的客户提供服务的员工,如下所示:

SELECT EName FROM Database.Employees, Database.Orders, Database.Customers
WHERE
Employees.EID = Orders.EID
AND
Orders.CID = Customers.CID
AND
CDistrict = 'A';

但是,当我尝试将这些查询加入到单个查询中时,例如

SELECT EName FROM Database.Employee, Database.Orders, Database.Customers
WHERE
Employees.EID = Orders.EID
AND
Orders.CID = Customers.CID
AND
CDistrict = 'A'
GROUP BY EName HAVING COUNT(OrderID) >=2;

我变成了 0 个结果。我想,这个查询可能会搜索在“A”区至少服务过 2 个订单的所有员工,但这不是我需要的 - 我需要至少服务过两个订单的员工,其中至少一个是在“A”区。我究竟做错了什么?如何将嵌套查询转换为常规查询?

最佳答案

使用 GROUP BYHAVING:

SELECT o.EmployeeID
FROM Database.Orders o JOIN
Database.Customers c
ON o.CustomerId = c.CustomerId
GROUP BY o.EmployeeID
HAVING COUNT(*) >= 2 AND
SUM(c.CDistrict = 'A') > 0;

关于mysql - SQL Select至少有2个订单且其中至少有一个在某区的员工,无嵌套SQL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com