mysql - 在sql上连接3个表并检查条件

标签 mysql

SelectClassicModels.Orders.CustomerNumber,
ClassicModels.CUSTOMERS.CUSTOMERNAME,     
ClassicModels.Employees.LASTNAME,
ClassicModels.Employees.firstNAME,
ClassicModels.employees.EmployeeNumber 
from ClassicModels.Orders

join 
ClassicModels.Customers
on ClassicModels.Orders.CustomerNumber = ClassicModels.Customers.CUSTOMERNUMBER

join

ClassicModels.EMPLOYEES
on ClassicModels.Employees.EMPLOYEENUMBER = ClassicModels.CUSTOMERS.SalesRepEmployeeNumber

这三个表在连接时工作得很好,但是当我尝试添加这些修饰符时,它们不起作用

group by ClassicModels.Orders.CustomerNumber
having count(ClassicModels.Orders.CustomerNumber) < 4

最佳答案

首先,欢迎来到 StackOverflow!

我已经使用我最喜欢的工具重新格式化了您的 SQL,如果您有兴趣,我可以提供一个链接。我还添加了别名以帮助使其更“可读”。 (别名是 FROMJOIN 子句中表名后的小写位。)

SELECT orders.CustomerNumber,
       customers.CustomerName,
       employees.LastName,
       employees.FirstName,
       employees.EmployeeNumber

FROM CLASSICMODELS.ORDERS orders

JOIN CLASSICMODELS.CUSTOMERS customers
  ON orders.CustomerNumber = customers.CustomerNumber

JOIN CLASSICMODELS.EMPLOYEES employees
  ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber

现在我们已经完成了。让我们添加您的 GROUP BYHAVING 子句。

GROUP BY 子句中必须包含 ALLSELECT 子句中使用的列。 (我不确定为什么。我没有查过,但我只知道它是这样工作的。:))

SELECT orders.CustomerNumber,
       customers.CustomerName,
       employees.LastName,
       employees.FirstName,
       employees.EmployeeNumber

FROM CLASSICMODELS.ORDERS orders

JOIN CLASSICMODELS.CUSTOMERS customers
  ON orders.CustomerNumber = customers.CustomerNumber

JOIN CLASSICMODELS.EMPLOYEES employees
  ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber

GROUP BY orders.CustomerNumber,
         customers.CustomerName,
         employees.LastName,
         employees.FirstName,
         employees.EmployeeNumber

现在应该可以了。然后,您只需在其中添加 HAVING 子句即可。

SELECT orders.CustomerNumber,
       customers.CustomerName,
       employees.LastName,
       employees.FirstName,
       employees.EmployeeNumber

FROM CLASSICMODELS.ORDERS orders

JOIN CLASSICMODELS.CUSTOMERS customers
  ON orders.CustomerNumber = customers.CustomerNumber

JOIN CLASSICMODELS.EMPLOYEES employees
  ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber

GROUP BY orders.CustomerNumber,
         customers.CustomerName,
         employees.LastName,
         employees.FirstName,
         employees.EmployeeNumber

HAVING COUNT(orders.CustomerNumber) < 4

我也在查看您的查询,您可能通过使用这样的查询获得更快(和更有效的结果):

WITH CUSTOMERSWITHLESSTHANFOURORDERS
AS
(
  SELECT CUSTOMERNUMBER
  FROM CLASSICMODELS.ORDERS
  GROUP BY CUSTOMERNUMBER
  HAVING COUNT(CUSTOMERNUMBER) < 4
)
SELECT O.CUSTOMERNUMBER,
       C.CUSTOMERNAME,
       E.LASTNAME,
       E.FIRSTNAME,
       E.EMPLOYEENUMBER
FROM CUSTOMERSWITHLESSTHANFOURORDERS O
JOIN CLASSICMODELS.CUSTOMERS C
  ON O.CUSTOMERNUMBER = C.CUSTOMERNUMBER
JOIN CLASSICMODELS.EMPLOYEES E
  ON E.EMPLOYEENUMBER = C.SALESREPEMPLOYEENUMBER;

它使用所谓的“公用表表达式”,基本上只是隔离了查询的一部分。它可能会更有效率,因为它会尝试对更少的数据进行分组,因此它可能会更快。小心,因为里面有很多“可能”,因为我不知道你的 MySQL 数据库中是如何设置各种不同的东西的。

祝你好运!

关于mysql - 在sql上连接3个表并检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347676/

相关文章:

MySQL LIMIT 返回错误的行集

php - mysql 5.1 发出错误信号导致PDO异常

mysql - 我们什么时候给 LAST_INSERT_ID() 一个参数?

php - WampServer 2.4 MySQL 实例未启动,图标保持橙色

php - 40公里半径使用经纬度

mysql - 我如何标准化我的数据库设计?

php - 将 Geo Ip 放入数据库 问题 PHP

java - 如何从终端运行 JDBC 代码?

mysql - mysql中的求和(IF)

MySQL 错误 1215 : Cannot add foreign key constraint