Вывод значения путем проверки различных полей в одной таблице - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть таблицы ниже (таблица 1 - это базовая таблица), и мне нужно получить новое поле "catid" и "origid".«Catid» - это просто конкатенация (id и nv), но origid получается путем проверки того, присутствуют ли в таблице 1 (sid или sid2 или sid3 или sid4) из таблицы 2.Если они присутствуют, просто назначьте им "catid" из таблицы 1

ЕСТЬ Таблица 1:

id    nv   sid sid2 sid3  sid4
---------------------------------------    
1     a    11   A1   B1    C1        
2     b    22   A2   B2    (null)  
3     c    33    A3   B3    C3     

Таблица 2:

id nv   sid     sid2   sid3    sid4         
---------------------------------------
4     x    11    (null)  B1     C1        
5     y   (null)  A2    B2      (null)    
6     z    33      A3   (null)    C3      

ХОЧУ Таблица 3:

id  nv    sid   sid2   sid3  sid4   catid   origid  
--------------------------------------------------
1     a     11    A1    B1   C1      1a       1a
2     b     22    A2    B2   (null)  2b       2b
3     c     33    A3    B3   C3      3c       3c
4     x     11   (null) B1   C1      4x       1a
5     y  (null)  A2    B2   (null)   5y       2b
6     z     33    A3  (null)  C3     6z       3c

Таблица 1

create table table1 (
    id number,
    nv varchar2(2)
    sid varchar2(3),
    sid2 varchar2(3),
    sid3 varchar2(3),
    sid4 varchar2(3)
);

Table 2

create table table2 (
    id number,
    nv varchar2(2),
    sid varchar2(3),
    sid2 varchar2(3),
    sid3 varchar2(3),
    sid4 varchar2(3)
);

insert into table1 values(1, 'a', '11','A1','B1','C1');
insert into table1 values(2, 'b', '22','A2','B2','');
insert into table1 values(3, 'c', '33','A3','B3','C3');
insert into table2 values(4, 'x', '11','','B1','C1');
insert into table2 values(5, 'y', '','A2','B2','');
insert into table2 values(6, 'z', '33','A3','','C3');

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

Вам нужно что-то вроде join, чтобы сделать это.Вот один из методов:

with t1 as (
      select id, nv, sid, sid2, sid3, sid4,
             id || nv as catid, id || nv as origid
      from table1
     )
select id, nv, sid, sid2, sid3, sid4, catid, origid
from t1
union all
select id, nv, sid, sid2, sid3, sid4, id || nv as catid,
       (select t1.origid
        from t1
        where (t1.sid = t2.sid or t1.sid2 = t2.sid2 or
               t1.sid3 = t2.sid3 or t1.sid4 = t2.sid4
              ) and
              rownum = 1
       ) as origid
from table2 t2;

Здесь - это дб <> скрипка.

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