使用子查询时合并语法、括号

问题描述

根据官方的 Merge 语法,USING 子句中的子查询不需要括号。然而,这些示例总是有它们,如果您在没有尝试的情况下尝试,则会收到错误消息。这是规范中的错误吗?

MERGE INTO bonuses D
   USING (SELECT employee_id,salary,department_id FROM employees
   WHERE department_id = 80) S
   ON (D.employee_id = S.employee_id)
   WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
     DELETE WHERE (S.salary > 8000);

解决方法

在我看来,子查询本身意味着括号中的内容。你见过“独立”的子查询吗?我没有。

select whatever 
from (select blabla from dual)     --> subquery,in parentheses

select (select dummy from dual)   --> parentheses again
from ...

为什么MERGE会例外?


Oracle 文档本身没有明确提及括号,标量子查询除外。但是,“一般规则”(由 Google 搜索返回)说“子查询必须括在括号中”。如果我是你,我会按原样接受