为什么我的查询只显示一个结果?

时间:2017-10-04 08:50:15

标签: mysql

为什么我只从下面的查询中获得一个结果?建议的“答案”的首字母名称为“苏珊”,而不是我在结果中得到的名称。

SELECT EmpFirstName, EmpLastName, p.ProductName as ProductName, 
YEAR(c.OrderDate) AS Year, 
SUM(o.QuotedPrice + o.QuantityOrdered) AS TotalValue 
FROM Employees 
NATURAL JOIN Products p 
NATURAL JOIN Order_Details o 
NATURAL JOIN Orders c 
ORDER BY Year, TotalValue DESC

结果图片

enter image description here

表格结构图像

enter image description here

2 个答案:

答案 0 :(得分:1)

因为您的查询中有一个Sum

答案 1 :(得分:0)

查询返回的结果与您的期望不符,因为查询无效。而你的期望是不正确的。

SELECT子句的表达式中存在aggregate (GROUP BY) function需要存在GROUP BY子句。当这样的子句不存在时,SQL标准会自动添加一个GROUP BY 1子句,该子句只生成所有选定行中的一个组。

SELECT查询的GROUP BY子句中出现的每个表达式必须遵循以下规则之一,才能拥有有效的SQL查询:

  1. 它也出现在GROUP BY子句中;
  2. 这是对aggregate (GROUP BY) function;
  3. 的致电
  4. 在功能上取决于GROUP BY子句中出现的一列。
  5. 由于您的查询没有GROUP BY子句,因此EmpFirstNameEmpLastNamep.ProductNameYEAR(c.OrderDate)这两个表达式无效{{1 }。clause。

    在5.7.5版本之前,MySQL曾经允许这样的无效SQL查询,但它保留了return indeterminate values对无效表达式的特权。

    从版本5.7.5开始,MySQL正确处理这些查询并拒绝它们。其他RDBMS-es多年前就正确处理它们。

    对不确定值的解释很简单:SELECTJOIN子句从表中提取一些行。 (缺少)WHERE子句只生成所有这些行中的一条记录。 GROUP BY查询永远不会从表中返回行,生成它在结果集中放置的值。由于组中GROUP BY有多个不同的值,因此SQL标准表示查询无效。 MySQL过去常常忽略标准,但它没有关于从EmpFirstName子句中的EmpFirstName表达式中选择什么值的有效规则。组中行的任何值都同样有效,并且它返回的是:组中的一个随机值。

    为了获得您希望的结果,您必须按SELECTOrderNumber(以及ProductNumber对行进行分组以获得有效的SQL查询):