Извлечение записей с помощью соединения - PullRequest
0 голосов
/ 17 апреля 2019

Ниже приведены примеры данных и запрос, который возвращает результат.

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 | MID | GRP_ID |    MID |
|--------|-----|--------|--------|
|      1 |   5 |      1 |      5 |
|      1 |   6 |      1 |      6 |
|      1 |   7 | (null) | (null) |
|      1 |   8 | (null) | (null) |

Могу ли я получить приведенный выше результат, не используя предложение In или Exists ... просто используя соединение left right или case.Пожалуйста, примите во внимание, что это пример данных

Пожалуйста, помогите спасибо.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Да, вы можете получить результаты, используя 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;

Демо

1 голос
/ 17 апреля 2019

вы можете использовать коррелированный запрос, в котором столбцы из внешнего запроса входят в качестве параметра для внутреннего запроса.это единственное решение:

select t1.grp_id,t1.mid ,(select t2.grp_id from Tab2 t2 where 
t1.grp_id=t2.grp_id and t1.mid=t2.mid ),
(select t2.mid from Tab2  t2 where t1.mid=t2.mid and t1.grp_id=t2.grp_id)
from tab1 t1 where t1.grp_id=1
;

чек http://sqlfiddle.com/#!4/f9113e/2

Спасибо !!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...