티스토리 뷰

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
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함