특정 테이블에 코드값 없는 개수만큼 insert를 해주고 싶은데.. 0 3 3,191

by 코린이 [Oracle 기초] oracle [2022.05.20 10:20:49]


select no,cd from A
no cd
1 a
1 b
1 c
1 d
1 e
2 a
2 c
2 e
3 a
3 e

A 테이블에 이런식으로 데이터가 있고

nm no mail tel tp
철수 1 a@b.com 1577-1577 S
영희 2 b@c.com 02-1234-1234 S
영철 3 c@d.com 02-1234-5678 S

B테이블에 이런식으로 있을떄

A테이블에 cd 5가지 값인 'a' , 'b', 'c', 'd', 'e' 에 대한 row가 하나씩 있어야하는데 

2,랑 3번에 없어서 없는만큼 insert를 해주고 싶습니다 

 

지금은

select no from A where no in (select no from B)

group by no

having count(no) <5;

해서 나온 no 값을 A테이블에서 검색해서 

 

select cd from A where no=1

minus

select cd from A where no=2

이렇게 no 를 2 ,3 이런 식으로 빼서 나온 결과의 cd 를 하나씩 아래처럼 없는거 그냥 입력해서 채웠는데 

insert into A(no,cd)

select ('2','b') from dual

union all 

select ('2','d') from dual

.

.

.

 

 

혹시 select 해서 insert 할 수 있는 방법이 있을까요

 

merge into를 사용하려고 했는데 마땅한 방법이 떠오르지 않아서요 ㅠㅠ

by 신이만든지기 [2022.05.20 10:50:13]
merge into a_table t
using (select b_table.no, cd_table.cd
         from b_table
             , (select chr(97 + level - 1) as cd  -- 'a'의 아스키값 97
                  from dual
                connect by level <= 5) cd_table
      ) s
on (t.no = s.no and t.cd = s.cd)
when not matched then
 insert (t.no, t.cd ) values (s.no, s.cd);

 


by 마농 [2022.05.20 11:10:54]
-- INSERT INTO a(no, cd)
SELECT a.no
     , b.cd
  FROM b a
 CROSS JOIN (SELECT cd FROM a WHERE no = 1) b
  LEFT OUTER JOIN a c
    ON a.no = c.no
   AND b.cd = c.cd
 WHERE c.cd IS NULL
;

 


by 코린이 [2022.05.20 13:32:05]

아이고 두분다 채택이 안되는군요 두 분다 감사드립니다 !!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입