Oracle多表内连接查询报缺失右括号错误求助
Oracle SQL缺失右括号错误的解决方法
原SQL存在的问题:
- 别名使用混乱:明明定义了表别名(如
A a、B b),后续引用列却用原表名(如A.m、B.m、D.s),导致语法逻辑冲突。 - TO_DATE参数错误:Oracle中日期格式符必须是单个单引号包裹的完整字符串,不能拆成两个双引号字符串,且Oracle字符串默认用单引号而非双引号。
- 列引用歧义:表C被两次关联(别名
c1、c2),WHERE子句里C.r没指定具体别名,数据库无法确定取哪个实例的列;同时表D的引用也没使用别名d,且原SQL错误把表D的r列写成了C.r。
修正后的SQL语句:
SELECT a.m, b.n, b.o, b.p, b.q, c1.q FROM A a INNER JOIN B b ON b.m = a.m INNER JOIN D d ON b.m = d.m INNER JOIN C c1 ON c1.s = a.s INNER JOIN C c2 ON c2.s = d.s WHERE d.r BETWEEN TO_DATE(:fromvar,'yyyy-MM-dd HH:mm:ss.SSS') AND TO_DATE(:tovar,'yyyy-MM-dd HH:mm:ss.SSS')
核心修正点:
- 全量使用表别名引用列(比如
a.m替代A.m,d.s替代D.s) - 把TO_DATE的格式字符串合并为单个单引号包裹的内容:
'yyyy-MM-dd HH:mm:ss.SSS' - WHERE子句明确用表D的别名
d引用r列(还原列所属表的正确性) - SELECT子句里指定C表列的具体别名
c1.q,避免两个C表实例的列歧义
内容的提问来源于stack exchange,提问作者Seeker
相关产品推荐
相关产品推荐

