在MySQL中工作,Oracle中缺少右括号

在MySQL中工作,Oracle中缺少右括号,mysql,sql,oracle,Mysql,Sql,Oracle,对于一个类项目,我们使用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 E

对于一个类项目,我们使用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表示缺少右括号后,我收到一条错误消息。是否确实需要在某个地方添加括号,或者是否存在其他问题?

您需要删除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); 

谢谢你,这工作做得很好。Oracle和MySQL之间的另一个问题是这个查询的另一个版本。@karlb22-所以您知道答案:在Oracle中,您可以为列、表和子查询提供别名。为列指定别名时,可以使用关键字,因为它是可选的,但为了清晰起见,可能需要使用关键字。但是,对于表和子查询,不能将关键字用作。正如您所发现的,MySQL有不同的规则。这是一个典型的经验,当你与竞争产品的工作,应该做基本上相同的工作。@mathguy谢谢!我有另一个问题,但它可能是更好的格式作为一个单独的职位在这里,所以一旦我的90分钟的限制是我会张贴它。它与此查询类似,但从两个不同的表中提取重复的名称从客户C1中选择C1.LastName,其中E1.LastName=C1.LastName和E1.FirstName=C1.FirstName。它在MySQL中返回4个结果,但在Oracle中没有结果,尽管它们具有相同的结果data@karlb22:这可能来自您的数据,而不是来自您使用的其他SQL方言。如果您提出问题,请确保提供正确的样本数据、当前结果和期望的结果。@GMB将确保这样做。谢谢