在sql中使用外部联接时出错

时间:2014-01-13 08:47:53

标签: sql oracle

我有一个在substr函数中使用外连接的查询。但它给我一个错误。

select * from A, B
where
UPPER(SUBSTR(HOST_NAME(+),1,INSTR(HOST_NAME,'.')-1)) = UPPER(VIRT_HOSTNAME)

以上查询(equi join)工作正常。但是,外连接会产生错误,如ORA-01417

有人可以帮忙修理它吗?

1 个答案:

答案 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);