鉴于以下结构:
create table region(
region_id number,
region_name varchar(50),
constraint region_pk primary key (region_id)
);
create table source_table(
ticket_id number,
region_name varchar(50),
constraint source_table_pk primary key (ticket_id, region_name)
);
create table target_table(
ticket_id number,
region_id number,
constraint target_table_pk primary key (ticket_id, region_id),
constraint fk_region_id foreign key (region_id) references region(region_id)
);
insert into region values(1,'north');
insert into region values(2,'east');
insert into region values(3,'south');
insert into region values(4,'west');
insert into source_table values(101,'north');
insert into source_table values(102,'north');
insert into source_table values(103,'west');
insert into source_table values(104,'south');
insert into source_table values(105,'east');
insert into source_table values(106,'west');
insert into target_table values(101,1);
insert into target_table values(102,1);
insert into target_table values(103,4);
insert into target_table values(104,3);
insert into target_table values(105,2);
insert into target_table values(107,2);
commit;
如何使用TARGET_TABLE正确完全外部联接 SOURCE_TABLE。以下不起作用:
select * from target_table tt
full outer join source_table st
on tt.ticket_id = st.ticket_id
join region r
on r.region_id=tt.region_id
where st.region_name=r.region_name;
我在中间查找很困难。 有人可以帮忙吗?
非常感谢!
答案 0 :(得分:2)
代码更容易理解的示例:
select * from
(select * from target_table tt join region rtt on tt.region_id = rtt.region_id) target_region
full outer join
(select * from source_table st join region rst on st.region_name = rst.region_name) source_region
on target_region.ticket_id = source_region.ticket_id;
答案 1 :(得分:1)
您描述问题的方式,您需要full outer join
,后跟left join
没有where
条款:
select *
from target_table tt full outer join
source_table st
on tt.ticket_id = st.ticket_id left join
region r
on r.region_id = tt.region_id and r.region_name = st.region_name;
我怀疑这不是你真正想做的事情,但它似乎是你问题的答案。仅当id与目标匹配且名称与源匹配时,才返回区域信息。