insert select 여러개 문의 0 2 737

by Kaiger [SQL Query] [2020.07.16 16:24:58]


안녕하세요

insert into table (

code1

,code2
,code3
,code4

) select 

a.code1

, (select ... from table b where aaa in ('dd','gg') as code2)

, a.code3

, a.code4

from dual

 

이런 형태의 inset 문은 select 에 또 select 를 하면 두번째 select 문에서 2건 이상이기 때문에 에러가 나는데

 

저런 형태는 어떻게 표현해야 하나요?

 

감사합니다

by 고기브페 [2020.07.16 16:36:00]

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

 


by 마농 [2020.07.16 17:07:46]

구문오류라기 보다는 논리적인 오류이므로 스스로 잡으셔야 합니다.
앞쪽 in sert into 부분을 제거한 순수 select 구문만 실행해 보세요.
select 구문의 실행 결과가 원하는 결과가 나올 때 까지 오류 수정하시면 됩니다.

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