티스토리 뷰
728x90
반응형
가끔가다 이러한 생각을 할때가 있습니다.
데이터를 등록을 하는 과정에서 이미 등록되어 있는 데이터가 있을 경우 업데이트를 하는 것이 아닌 그냥 무시하는 방법 이 없을까? 하고 , 보통 생각해보면 이러한 경우 미리 SELECT를 통해 데이터 여부를 확인하고 데이터가 없다면 INSERT 아니면 IF 조건으로 빠져나오는 방식을 할 것 입니다. 그런 것도 좋지만 쿼리 자체에서 해당 문제를 해결 할 수 있는 쿼리가 있습니다.
<!-- 해당 처리 방식은 insert 시 이미 데이터가 존재하면 등록하지 않는 방식을 의미 -->
INSERT INTO sns_facebook_channel (
fb_post_id
, fb_user_id
, fb_message
, fb_caption
, fb_description
, fb_picture
, fb_source
, fb_link
, fb_created_time
, create_date
, modify_date
) SELECT * FROM (
SELECT
#{postId,jdbcType=VARCHAR} as postId
, #{userId,jdbcType=VARCHAR} as userId
, #{message,jdbcType=VARCHAR} as message
, #{caption,jdbcType=VARCHAR} as caption
, #{description,jdbcType=VARCHAR} as description
, #{picture,jdbcType=VARCHAR} as picture
, #{source,jdbcType=VARCHAR} as source
, #{link,jdbcType=VARCHAR} as link
, #{createdTime,jdbcType=VARCHAR} as createdTime
, sysdate() as create_date
, sysdate() as modify_date
) as tmp
WHERE NOT EXISTS (
SELECT fb_post_id FROM sns_facebook_channel
WHERE fb_post_id = #{postId}
) LIMIT 1
위의 쿼리와 같이 WHERE NOT EXISTS 에서 해당 PK 또는 특정 WHERE 조건을 만족하는 데이터가 없는 경우를 체크하여 등록을 처리할 수 있습니다.
728x90
반응형
'데이터베이스' 카테고리의 다른 글
MYSQL INSERT/UPDATE 를 한 쿼리에서 선택 처리 방법 (0) | 2023.12.22 |
---|
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리눅스
- 캐시
- spring
- 알고리즘
- mybatis
- Java
- hazelcast
- leatcode
- 격리수준
- Linux
- docker
- dockerfile
- 정의
- 개념 이해하기
- dfs
- Lock
- ncp
- Cache
- 권한
- insert
- Quartz
- MySQL
- 네이버 클라우드
- LocalDate
- 스케줄러
- centos7
- 이미지
- 도커
- 캘린더
- 컨테이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함