SELECT
F.numero,
SUM (SELECT (C.unidades * P.preco)
FROM linhafatura C, produto P)
WHERE (C.produto = P.ean13)
AND (C.produto = L.produto)
AND (C.fatura = L.fatura))
FROM fatura F, linhafatura L
WHERE (F.numero = L.fatura);
我在SQL live中测试了一下,结果显示
ORA-00936:缺失表达
这是一个非常有用的错误
(我确信所介绍的表格和数据都是正确的,因为代码是由我的老师编写的)
任何帮助都可以接受,谢谢
您的查询在FROM linhafatura C, produto P)
之后额外的右括号并且您需要将相关的子查询包装在()
括号内,因此您有一组用于SUM()
函数的括号和另一组用于子查询的括号并且您还需要GROUP BY
子句:
SELECT F.numero,
SUM(
(
SELECT (C.unidades * P.preco)
FROM linhafatura C, produto P
WHERE (C.produto = P.ean13)
AND (C.produto = L.produto)
AND (C.fatura = L.fatura)
)
) AS value
FROM fatura F,
linhafatura L
WHERE (F.numero = L.fatura)
GROUP BY
f.numero;
可以不加括号重写为:
SELECT F.numero,
SUM(
(
SELECT C.unidades * P.preco
FROM linhafatura C, produto P
WHERE C.produto = P.ean13
AND C.produto = L.produto
AND C.fatura = L.fatura
)
) AS value
FROM fatura F,
linhafatura L
WHERE F.numero = L.fatura
GROUP BY
f.numero;
,再次用现代ANSI连接重写(而不是30年前遗留的逗号连接语法):
SELECT F.numero,
SUM (
(
SELECT C.unidades * P.preco
FROM linhafatura C
INNER JOIN produto P
ON C.produto = P.ean13
WHERE C.produto = L.produto
AND C.fatura = L.fatura
)
) AS value
FROM fatura F
INNER JOIN linhafatura L
ON F.numero = L.fatura
GROUP BY
f.numero;
小提琴
注意:根据你的数据,你可能会得到错误:ORA-01427: single-row subquery returns more than one row
fiddle