Oracle三表连接查询报ORA-00905缺失关键字错误排查
报错根因
你触发ORA-00905: missing keyword错误的核心原因是Oracle数据库的外连接语法不支持单独写OUTER JOIN,必须在OUTER JOIN前明确指定外连接类型:LEFT/RIGHT/FULL三选一,原语句里只写了outer join,缺少连接类型关键字,解析器无法识别连接逻辑,就会抛出缺关键字的报错。
修正方案
根据实际需要保留哪部分未匹配数据的业务逻辑,选择对应的外连接类型即可:
- 要保留全部client表记录,即使没有匹配的owns、account数据,使用左外连接
- 要保留全部account表记录,即使没有匹配的owns、client数据,使用右外连接
- 要保留三张表所有未匹配关联条件的记录,使用全外连接
最常用的「查询所有客户及其名下账户余额,没有账户的客户也展示」场景的修正SQL如下:
select client.client_nbr, owns.account_nbr,account.balance from client left outer join owns on client.client_nbr=owns.client_nbr left outer join account on owns.account_nbr=account.account_nbr
补充说明:Oracle语法中outer关键字本身可以省略,直接写left join/right join/full join也能正常执行,但代表连接方向的left/right/full关键字不能省略。
内容的提问来源于stack exchange,提问作者nick shetty
相关产品推荐
相关产品推荐

