我有以下查询并得到一个"缺少右括号" 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 ...部分上方)看到的任何错误。我可以将其取出并且查询运行正常,所以它没有别的在那之上。
答案 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)
最初发布的查询有几个问题:
另一方面,您修改后的查询适用于我。