首页 > 解决方案 > 使用连接获取记录

问题描述

下面是示例数据和返回结果的查询。

create table tab1 (grp_id number, mid number);
create table tab2 (grp_id number, mid number);

insert into tab1 values(1, 5);
insert into tab1 values(1, 6);
insert into tab1 values(1, 7);
insert into tab1 values(1, 8);
insert into tab1 values(2, 9);
insert into tab1 values(2, 10);

insert into tab2 values(1, 5);
insert into tab2 values(1, 6);
-----------------------------------------
select *
  from tab1 t1, tab2 t2
 where t1.mid = t2.mid(+)
   and t1.grp_id in (select grp_id from tab2)
  ;
| GRP_ID | 中 | GRP_ID | 中 |
|--------|-----|--------|--------|
| 1 | 5 | 1 | 5 |
| 1 | 6 | 1 | 6 |
| 1 | 7 | (空) | (空) |
| 1 | 8 | (空) | (空) |

我可以在不使用 In 或 Exists 子句的情况下获得上述结果吗.. 只需使用 join left right 或 case。请务必考虑这是示例数据

请帮忙谢谢。

标签: sqloraclejoin

解决方案


是的,您可以left join直接使用

select t1.grp_id as grp_id_1,t1.mid as mid_1,
       t2.grp_id as grp_id_2,t2.mid as mid_2
  from tab1 t1 
  left join tab2 t2 on t1.grp_id=t2.grp_id and t1.mid=t2.mid
 where t1.grp_id=1;

Demo


推荐阅读