我正在尝试构建一个复杂的查询,但我不确定它的结构是否正确,因为我得到了错误:ORA-00933:SQL命令未正确结束。错误发生在第2行。求你了,你能帮我一下吗。非常感谢。
SELECT CNP,ValoareTotala
FROM Vanzari AS V
RIGHT OUTER JOIN Functionar AS F
ON V.CNP= F.CNP
RIGHT OUTER JOIN Achizitii AS A
ON F.CNP= A.CNP
WHERE CNP in (SELECT CNP
FROM Achizitii
WHERE CNP =
(SELECT CNP
FROM Functionar
WHERE Nume='Alex Viseu'))
GROUP BY CNP, ValoareTotala
HAVING ValoareTotala>10
ORDER BY ValoareTotala DESC;
在Oracle中,不能将AS
用于表别名。您可以使用列别名,这是可选的,但不允许使用表别名。您可以在语法图中看到这一点,该图显示了不带可选AS
关键字的t_alias
。
因此,将其从所有三个引用中删除:
SELECT CNP,ValoareTotala
FROM Vanzari V
RIGHT OUTER JOIN Functionar F
ON V.CNP= F.CNP
RIGHT OUTER JOIN Achizitii A
ON F.CNP= A.CNP
WHERE CNP in (SELECT CNP
FROM Achizitii
WHERE CNP =
(SELECT CNP
FROM Functionar
WHERE Nume='Alex Viseu'))
GROUP BY CNP, ValoareTotala
HAVING ValoareTotala>10
ORDER BY ValoareTotala DESC;
但是,您还需要弄清楚每列来自哪个表,特别是在同一列名出现在多个表中的情况下——由于具有联接条件ON V.CNP= F.CNP
和ON F.CNP= A.CNP
,列CNP
存在于所有三个表中;所以对CNP
的其他引用必须指定您的意思。
也不清楚为什么要使用子查询,尤其是再次引用相同表的子查询。