我有一个在substr函数中使用外连接的查询。但它给我一个错误。
select * from A, B
where
UPPER(SUBSTR(HOST_NAME(+),1,INSTR(HOST_NAME,'.')-1)) = UPPER(VIRT_HOSTNAME)
以上查询(equi join)工作正常。但是,外连接会产生错误,如ORA-01417
有人可以帮忙修理它吗?
答案 0 :(得分:0)
必须在HOST_NAME列的两个实例上使用旧的(+)
语法。或者您可以使用现代ANSI语法。
问题示例
create table a(host_name varchar2(100));
create table b(virt_hostname varchar2(100));
select * from A, B
where UPPER(SUBSTR(a.HOST_NAME(+),1,INSTR(a.HOST_NAME,'.')-1)) =
UPPER(b.VIRT_HOSTNAME);
ORA-01417: a table may be outer joined to at most one other table
解决方案#1 - 使用其他(+)
select * from A, B
where UPPER(SUBSTR(a.HOST_NAME(+),1,INSTR(a.HOST_NAME(+),'.')-1)) =
UPPER(b.VIRT_HOSTNAME);
解决方案#2 - 使用ANSI连接语法
select *
from A
left join B
on UPPER(SUBSTR(a.HOST_NAME,1,INSTR(a.HOST_NAME,'.')-1)) =
UPPER(b.VIRT_HOSTNAME);