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 | 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를 사용하려고 했는데 마땅한 방법이 떠오르지 않아서요 ㅠㅠ
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);
-- 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
;
아이고 두분다 채택이 안되는군요 두 분다 감사드립니다 !!