Select 에서 사용 하는 서브 쿼리는 단일행 즉 단 1개의 행만 존재 하여야 합니다.
의도 하여 같은내용에 Code2 내용만 바뀌어 Insert 하시려는 것이라면
의도적으로 중복 행 나오게 Join 하셔서 처리 하는게 맞을 것 같네요
주의 하실점이 a 라고 주신 테이블의 데이터가 n 개
b 테이블의 in 조건 결과가 n2 개라고 하면 n * n2 개 의 Row 가 Insert 될거에요
불필요 정보를 Insert 시키지 않으시려면 join 조건을 걸으셔서 해결 하셔야 해요
insert into TarGetTable (code1, code2, code3, code4 ) select a.code1, b.code2, a.code3, a.code4 from table1 a ,(select code2 from table2 where aaa in ( 'bb','gg') ) b
아래 쿼리에서 WHERE 조건을 제거 해보시고 결과 나오시는거 보시면 이해 하시기 편하실거에요
A는 3줄, B 는2 줄 JOIN 조건을 넣지 않을경우
A Row Count * B Row Count 만큼의 행이 만들어져요
WITH A AS ( SELECT 'A1' CODE1, 'A2' CODE2,'A3' CODE3,'A4' CODE4 FROM DUAL UNION ALL SELECT 'B1','B2','B3','B4' FROM DUAL UNION ALL SELECT 'C1','C2','C3','C4'FROM DUAL ), B AS ( SELECT 'A1' CODE1, 'ZZ' CODE2 FROM DUAL UNION ALL SELECT 'C1' , 'XX' FROM DUAL ) SELECT A.CODE1, B.CODE2, A.CODE3, A.CODE4 FROM A , B WHERE A.CODE1 = B.CODE1