ORA-00907缺失右括号报错 挪威客户订单产品统计SQL排错
ORA-00907 报错修复方案
你触发这个报错的核心原因是SQL子句顺序写错,附带还有几个拼写和逻辑错误,逐一列示:
- 子句顺序违规:
GROUP BY必须放在所有JOIN关联、WHERE筛选之后,你把GROUP BY ORDERS.ORDERID直接写在FROM PRODUCTS后面,Oracle解析时会判定FROM段存在未闭合的子查询(缺右括号),直接抛出ORA-00907。 - 标识符拼写不一致:你写的关联表名
ORDERSDETAILS和后续关联条件里的ORDERDETAILS不匹配;统计字段写的PRODUCTS.PRODUCTSID和关联条件里的PRODUCTS.PRODUCTID拼写冲突;关联客户表的字段ORDERS.CUSTOMERSID也需要和实际表结构核对,常规命名为单数形式CUSTOMERID。 - 统计逻辑不符合要求:题目要求统计不同产品数量,COUNT需要加
DISTINCT去重,避免同一产品在订单明细中拆分多条记录时重复计数。 - WHERE子句的括号属于冗余写法,不影响运行但可以去掉简化代码。
修正后的SQL代码如下:
SELECT ORDERS.ORDERID, COUNT(DISTINCT PRODUCTS.PRODUCTID) AS NUMPRODUCTS FROM PRODUCTS INNER JOIN ORDERDETAILS ON PRODUCTS.PRODUCTID = ORDERDETAILS.PRODUCTID INNER JOIN ORDERS ON ORDERDETAILS.ORDERID = ORDERS.ORDERID INNER JOIN CUSTOMERS ON ORDERS.CUSTOMERID = CUSTOMERS.CUSTOMERID WHERE CUSTOMERS.COUNTRY = 'Norway' GROUP BY ORDERS.ORDERID;
提示:如果你的实际表结构里客户外键、产品主键的命名和上述代码有差异,直接对应替换字段名即可,核心必须保证
GROUP BY位于所有JOIN和WHERE之后。
内容的提问来源于stack exchange,提问作者Crej00
相关产品推荐
相关产品推荐

