即使所有括号都在那里,EXISTS也会给我一个右括号错误

时间:2015-04-23 21:16:39

标签: sql oracle

我有以下查询并得到一个"缺少右括号" EXISTS声明中的错误,即使我没有看到任何遗漏的括号。

Select 
  t1.ID
  ,t2.NAME
FROM
  TABLE1 t1
  LEFT OUTER JOIN TABLE2 t2 ON t1.ID=t2.ID
WHERE
  t1.ID=123
  AND
  (EXISTS
    (SELECT 1 FROM TABLE3 AS t3 WHERE t1.ID=t3.ID AND t2.NAME=t3.NAME)
  OR t1.OTHER_THING=1 OR t2.OTHER_THING=1)

如果其他条件为真,我基本上想要来自t1和t2的数据(如果它存在于t3中)。为什么这不起作用?更正:它适用于MS-SQL,但不适用于Oracle。

而且我无法发布实际查询,因为我可能会遇到麻烦所以不要再问。

此外,由于这不是复制粘贴,忽略您在AND(EXISTS ...部分上方)看到的任何错误。我可以将其取出并且查询运行正常,所以它没有别的在那之上。

3 个答案:

答案 0 :(得分:1)

我想我明白了。我的查询实际上在TABLE3和t3之间有一个“AS”。删除它以某种方式修复它。我可以通过将“AS”重新放入来重现它。很奇怪。 MS-SQL并不关心它在那里,但Oracle给出了错误。感谢大家的帮助,特别是那些了解查询逻辑很重要的人;)

答案 1 :(得分:0)

你在EXISTS之前的大括号引起了混乱,试试这个:

Select 
  t1.ID
  ,t2.NAME
FROM
  TABLE1 t1
  LEFT OUTER JOIN TABLE2 t2 ON t1.ID=t2.ID
WHERE
  t1.ID=123
  AND EXISTS
    (SELECT 1 FROM TABLE3 t3 WHERE t1.ID=t3.ID AND t2.NAME=t3.NAME)
  OR t1.OTHER_THING=1 OR t2.OTHER_THING=1

答案 2 :(得分:0)

最初发布的查询有几个问题:

  • ' ON'外连接的连接条件中省略了关键字
  • 表别名" t2"无处宣布
  • 表别名" t"之间存在明显的混淆。和" t1"
  • 有一个名为" TABLE"的表,它是一个关键字,它被引用为一个裸名称

另一方面,您修改后的查询适用于我。

相关问题