【问题标题】:What is 'keyword' is missing from this query?此查询中缺少什么“关键字”?
【发布时间】:2015-04-25 19:13:04
【问题描述】:

这就是我所拥有的;

SELECT c.customerFN, c.customerEmail, p.productName, 
SUM(p.unitsonstock + p.unitsordered) AS "All Units"
FROM customer c
INNER JOIN order o
 WHERE c.customerID=o.customerID
INNER JOIN orderDetails d 
 WHERE o.orderID=d.orderID
INNER JOIN product p
 WHERE p.productCode=l.productCode
WHERE orderDate <= '2015-03-15'
 ORDER BY productName;

当我输入这个时,数据库在第四行抛出“缺少关键字”错误。你能告诉我我错过了什么吗

【问题讨论】:

  • ON 子句丢失。
  • 我应该在哪里实现 ON 子句?感谢您的意见

标签: sql oracle keyword


【解决方案1】:

您需要使用ON,而不是第 5、7 和 9 行中的 WHERE。您也在使用函数SUM,但没有GROUP BY。像这样更改您的查询:

SELECT c.customerFN, c.customerEmail, p.productName, 
SUM(p.unitsonstock + p.unitsordered) AS "All Units"
FROM customer c
INNER JOIN order o
ON c.customerID=o.customerID
INNER JOIN orderDetails d 
ON o.orderID=d.orderID
INNER JOIN product p
ON p.productCode=l.productCode
WHERE orderDate <= '2015-03-15'
GROUP BY c.customerFN, c.customerEmail, p.productName
ORDER BY p.productName;

【讨论】:

  • 第一行错误:ORA-00937:不是单组组功能。我已经为此奋斗了二十分钟
  • @Skersh 我更新了答案,它现在应该可以工作了
【解决方案2】:

JOIN 使用ON 子句执行,而不是WHERE

...
FROM customer c
INNER JOIN order o ON c.customerID=o.customerID
INNER JOIN orderDetails d ON o.orderID=d.orderID
INNER JOIN product p ON p.productCode=d.productCode
WHERE orderDate <= '2015-03-15'    
...

after 加入的WHERE 子句应该像在查询中那样使用。

除了JOIN 的问题之外,在没有分组的情况下使用SUM 也存在问题。你可能想要这样的东西:

SELECT c.customerFN, c.customerEmail, p.productName, 
       SUM(p.unitsinstock + p.unitsordered) AS "All Units"
FROM customer c
INNER JOIN order o ON c.customerID=o.customerID
INNER JOIN orderDetails d ON o.orderID=d.orderID
INNER JOIN product p ON p.productCode=d.productCode
WHERE orderDate <= '2015-03-15'
GROUP BY customerFN, customerEmail, productName
ORDER BY p.productName;

使用SUM 函数意味着GROUP BY 子句。不属于 SUM 等聚合函数的每一列都必须出现在 GROUP BY 子句中。

【讨论】: