在 MySQL 中工作,在 Oracle 中缺少右括号
Posted
技术标签:
【中文标题】在 MySQL 中工作,在 Oracle 中缺少右括号【英文标题】:Working in MySQL, missing right parenthesis in Oracle 【发布时间】:2020-04-23 17:19:33 【问题描述】:对于一个课堂项目,我们使用 mysql 和 Oracle 创建数据库并编写查询来选择数据。
这个查询:
SELECT E1.EmployeeID, E1.FirstName, E1.LastName
FROM EMPLOYEE AS E1
WHERE EXISTS
(SELECT E2.LastName
FROM EMPLOYEE AS E2
WHERE E1.LastName = E2.LastName
AND E1.EmployeeID <> E2.EmployeeID);
在 MySQL 上运行良好并返回两个结果,但在 Oracle 上,我在 E1 后收到一条错误消息,说我缺少右括号。实际上有什么地方我需要添加括号还是有其他问题?
【问题讨论】:
【参考方案1】:您需要删除 AS
才能使其在 Oracle 上运行:
SELECT E1.EmployeeID, E1.FirstName, E1.LastName
FROM EMPLOYEE E1 -- here
WHERE EXISTS
(SELECT E2.LastName
FROM EMPLOYEE E2 -- here
WHERE E1.LastName = E2.LastName
AND E1.EmployeeID <> E2.EmployeeID);
db<>fiddle demo
【讨论】:
谢谢你这工作完美。我在使用此查询的另一个版本时遇到了 Oracle 和 MySQL 之间的另一个问题。 @karlb22 - 所以你明白了答案:在 Oracle 中,你可以给列、表和子查询赋予别名。当您为列指定别名时,您可以使用关键字AS
(它是可选的,但它可能有助于清晰)。但是,对于表和子查询,您不能使用关键字AS
。如您所见,MySQL 有不同的规则。当您使用本应完成相同工作的竞争产品时,这是一种典型的体验。
@mathguy 谢谢!我还有一个问题,但它可能会更好地格式化为一个单独的帖子,所以一旦我的 90 分钟限制到了,我会发布它。它类似于此查询,但从两个不同的表中提取重复名称 (SELECT C1.LastName FROM CUSTOMER C1 WHERE E1.LastName = C1.LastName AND E1.FirstName = C1.FirstName)。它在 MySQL 中返回 4 个结果,但在 Oracle 中没有结果,尽管它们具有相同的数据
@karlb22:这可能来自您的数据,而不是您使用不同的 SQL 方言。如果您提出问题,请确保提供正确的样本数据、当前和期望的结果。
@GMB 将确保这样做。谢谢以上是关于在 MySQL 中工作,在 Oracle 中缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章