在 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 中缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章

FROM中的子查询不在Oracle SQL中工作

为啥匕首图可以在 java 中工作,但在 Kotlin 中却说在我提供时缺少提供?

选择语句中的子查询如何在 oracle 中工作

在 oracle 和 HSQL 中工作的查询

联接如何在 Cloud Spanner 数据库中工作?

ORA-00907: SQL 中的自然连接缺少右括号