SQL*Plus执行Oracle查询后结果显示异常如何解决
问题原因
你当前使用的NATURAL JOIN属于隐式关联逻辑,会自动匹配两个表中所有同名字段作为关联条件,本身可读性极差,也极易因为字段归属歧义、隐式关联规则不符合预期导致结果异常。
另外你查询语句中未给location_id指定表别名,也会导致Oracle解析字段归属时出现歧义,触发显示异常。
修复方案
方案1:调整NATURAL JOIN写法(不推荐)
如果要继续使用NATURAL JOIN,无需给公共关联字段加表别名,调整后代码如下:
select department_id, location_id, street_address, state_province, city, country_name from departments natural join locations natural join countries
方案2:改用显式INNER JOIN(推荐)
直接指定关联条件,逻辑清晰可控,不会受表结构变更、字段歧义影响,代码如下:
select d.department_id, l.location_id, l.street_address, l.state_province, l.city, c.country_name from departments d inner join locations l on d.location_id = l.location_id inner join countries c on l.country_id = c.country_id
内容的提问来源于stack exchange,提问作者Saif Romdhane
相关产品推荐
相关产品推荐

