SQL 쿼리에서 INSERT와 UPDATE를 값이 없는경우 인서트 있는경우 업데이트 채택완료
</p>
<p>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</p>
<p>
위 쿼리문에서 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
식으로도 할 수 있습니다
답변에 대한 댓글 4개
SELECT T1.no, T1.userid, T1.name, T1.passwd, T1.sex, T1.email, T1.date, T1.ip_addr
FROM user_tbl T1 left JOIN user_tbl_test ON user_tbl_test.`no` = T1.`no`
WHERE user_tbl_test.no IS NULL
left join으로 해야 하네요.
이 조건은 중복?이 생길 수 없습니다.
있다고 한다고 하면
ON DUPLICATE KEY UPDATE
사용하시면 됩니다.
댓글을 작성하려면 로그인이 필요합니다.
num 과 같은 것들과 아닌것들을 두 분류로 나눠서 업데이트를 하면 되지 않을가요?
쿼리문을 2개로 해서요. 일단 쉬운쪽으로 하시고 나중에 업데이트 하시는 방향이 바람직해 보이네요.
잠간 생각해 봤지만 if else 문도 사용가능할 것으로 보이네요
아래 소스는 위 사이트 내용입니다.
</p>
<pre>
<code>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]')
)
</code>
이 부분이 도움이 되실것 같습니다.
이 부분이 아니시라면 검색을 더 해보시면 될것 같구요.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
키업 진행시, 어디에 위치시켜야할지가 어렵네요..ㅠ
[code]
INSERT INTO user_tbl_test
(
`no`, userid, name, passwd, sex, email, `date`, ip_addr
)
SELECT
T1.*
FROM
user_tbl T1
WHERE 1=1
AND T1.`no` > (SELECT coalesce(max(`no`), 0) FROM user_tbl_test)
ON DUPLICATE KEY UPDATE user_tbl INNER JOIN user_tbl_test
ON user_tbl.`no` = user_tbl_test.`no`
SET user_tbl_test.sex = 'w'
WHERE user_tbl.sex = 'w'
[/code]
이렇게 짜보았는데, INSERT는 잘되는데, no가 중복일 경우에는 업데이트 하라라는 건데,
업데이트 되지 않는데, 쿼리 문법이 잘못 된걸까요? (user_tbl의 컬럼sex가 w인 경우, user_tbl_test의 컬럼 sex의 데이터를 w로 바꾸는 예제사항)
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
[code]
INSERT INTO user_tbl_test
(
`no`, userid, name, passwd, sex, email, `date`, ip_addr
)
SELECT
T1.*
FROM
user_tbl T1 INNER JOIN user_tbl_test ON user_tbl_test.`no` = T1.`no`
WHERE 1=1
AND T1.`no` > (SELECT coalesce(max(`no`), 0) FROM user_tbl_test) AND T1.`no` IS NULL
[/code]
이형태가 맞는지요 ㅠㅠ?