我想显示供应商名称和由供应商21344和24288提供的产品生成的销售额总值。
这是我的问题:
SELECT v_name,PRODUCT.p_code, SUM(line_units*line_price)
FROM VENDOR, PRODUCT, LINE
WHERE VENDOR.v_code = PRODUCT.v_code
AND PRODUCT.p_code = LINE.p_code
AND VENDOR.v_code = 21344 AND VENDOR.v_code= 24288
GROUP BY v_code;
我不知道此代码是否正确,但我收到ORA-00918
错误。我该如何解决?
答案 0 :(得分:1)
ORA-00918
错误的含义非常简单:有多个表具有相同的列名。在这种情况下,每当我们引用列名称以识别我们想要的实例时,我们都必须使用表别名。
您在WHERE子句中对列引用进行别名处理时非常严格,但是您错过了GROUP BY中的列引用。在这里,我把它与VENDOR别名:
SELECT v_name,PRODUCT.p_code, SUM(line_units*line_price)
FROM VENDOR, PRODUCT, LINE
WHERE VENDOR.v_code = PRODUCT.v_code
AND PRODUCT.p_code = LINE.p_code
AND VENDOR.v_code in ( 24288, 21344)
GROUP BY VENDOR.v_code;
请注意,我还修复了VENDOR.v_code
上的过滤器;显然x = 1 AND x = 2
的计算结果为false,因此您的查询永远不会返回任何行。
答案 1 :(得分:0)
以下是编写查询时的一些有用指南:
FROM
子句中使用逗号; 始终使用显式JOIN
语法。GROUP BY
。如果你正在学习SQL而不是学习这些或类似的指导原则,那么你(不幸的是)你没有好的材料可供学习。
如果我们将此应用于您的查询:
SELECT v.v_name, SUM(l.line_units * l.line_price)
FROM VENDOR v JOIN
PRODUCT p
ON v.v_code = p.v_code JOIN
LINE l
ON p.p_code = l.p_code
WHERE v.v_code IN (21344, 24288)
GROUP BY v.v_name;
请注意,这会从SELECT
和GROUP BY
中删除产品代码。如果您想要按产品分类,请在两个地方都包含产品代码。