SQL 쿼리에서 INSERT와 UPDATE를 값이 없는경우 인서트 있는경우 업데이트
본문
INSERT INTO table1
(
NUM, TEMP21, TEMP22, TEMP23, TEMP24, TEMP25, TEMP26, TEMP27, TEMP28, TEMP29, TEMP30, CDT
)
SELECT
T1.*
, now() AS CDT
FROM
table2 T1
WHERE 1=1
AND NUM > (SELECT coalesce(max(NUM), 0) FROM table1)
ORDER BY
NUM ASC
위 쿼리문에서 table2에 있는 데이터를 table1에 인서트 하는 쿼리문인데,
만약 값이 없으면 인서트하고, 값이 있다면 업데이트 하는 쿼리로 바꿀려면 어떻게 진행하여야 할까요?
데이터 유무는 NUM컬럼을 기준으로 체킹하고 싶네요ㅠ
!-->답변 3
제목대로라면
insert ... on duplicate key update가 맞지만
WHERE NUM > (SELECT coalesce(max(NUM), 0) FROM table1)
// ORDER BY NUM ASC
Max보다 크다는 것은
T2에만 있는 것을 넣겠다는 것 같군요
Insert into T1( ...)
select T2... from T1 inner join T2 on T1.num=T2.num
where T2.num is null
식으로도 할 수 있습니다
num 과 같은 것들과 아닌것들을 두 분류로 나눠서 업데이트를 하면 되지 않을가요?
쿼리문을 2개로 해서요. 일단 쉬운쪽으로 하시고 나중에 업데이트 하시는 방향이 바람직해 보이네요.
잠간 생각해 봤지만 if else 문도 사용가능할 것으로 보이네요
아래 소스는 위 사이트 내용입니다.
IF EXISTS(SELECT id FROM Table WHERE username = '$data[1]' AND course <> '$data[3]')
(
UPDATE username='$data[1]',type='$data[2]',course='$data[3]',status='$data[4]',started='$data[5]',completed='$data[6]'
)
(
INSERT into table(recordnumber, username,type,course,status,started,completed) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')
)
이 부분이 도움이 되실것 같습니다.
이 부분이 아니시라면 검색을 더 해보시면 될것 같구요.
!-->
답변을 작성하시기 전에 로그인 해주세요.