๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Basics/SQL

[MariaDB]Selectํ•œ ๊ฐ’ Insert ํ•˜๊ธฐ + IF ์•„๋‹˜x CASE WHEN THEN ELSE o ํ•˜๋Š” ์ฟผ๋ฆฌ in Mybatis

by IworldT 2022. 7. 21.
๋ฐ˜์‘ํ˜•

MariaDB๋Š” MySQL์ด๋ž‘ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ๊ฐ€๋” ๋‹ค๋ฅด๊ณ ..

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ธ๊ณ„๊ฐ€ ๊ทธ๋ ‡๋“ฏ ๋ณต์žกํ•˜์ง€ ์•Š๊ณ  ๊น”๋”ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์งœ๊ธฐ๋ž€ ๋„ˆ๋ฌด ํž˜๋“ค๋‹ค๋Š” ๊ฒƒ..

 

์›๋ž˜๋Š” INSERT ํ›„ INSERT ํ•œ ๊ฐ’๋“ค์„ UPDATE ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ ค ํ–ˆ์œผ๋‚˜, ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ INSERT ํ›„ ์ปค๋ฐ‹์ด ๋˜์ง€ ์•Š์•„ UPDATE๋„ ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

์ด๋ฒˆ INSERT SELECT WHERE, CASE WHEN ์ฟผ๋ฆฌ๋Š” ์†”์งํžˆ ์—„์ฒญ ๋ง˜์— ๋“œ๋Š” ์ฟผ๋ฆฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ,

๊ทธ๋ž˜๋„ SELECT๋กœ ๊ฒ€์ƒ‰ํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ KEY๋กœ INSERT ํ•˜๊ธฐ + ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ CASE WHEN THEN์„ ์จ์„œ ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ์ง€์ •ํ•ด์ฃผ๊ธฐ ๋“ฑ์„ ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ์ ์— ๊ธ€์„ ์จ๋ณธ๋‹ค.

๊ฒ€์ƒ‰ํ•ด๋„ MariaDB์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ์˜ˆ์ œ๋Š” ๋งŽ์ง€ ์•Š๊ณ  ใ… ใ…  MySQL์„ ์จ์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งˆ๋ฆฌ์•„๋””๋น„ ์œ ์ €๋“ค์˜ ๊ณ ์ถฉ์ด๋ผ๋ฉด ๊ณ ์ถฉ..(๋ฌด๋ฃŒ๋‹ˆ๊น ๋ด์ค˜!)

 

๊ทธ๋Ÿผ ์ง€๊ธˆ๋ถ€ํ„ฐ ์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์—ฌ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ๋‹ค.

MariaDB(MySQL) INSERT INTO SELECT CASE WHEN THEN ELSE END

<ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์š”๊ตฌ์‚ฌํ•ญ>

[MariaDB]Selectํ•œ ๊ฐ’ Insert ํ•˜๊ธฐ + IF ์•„๋‹˜x CASE WHEN THEN ELSE o ํ•˜๋Š” ์ฟผ๋ฆฌ in Mybatis

[์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”]์—์„œ '์‚ฌ์šฉ์ž ์•„์ด๋””'๋ฅผ ๊ฐ€์ ธ์™€์„œ [์—ฐ์ฐจ ํ…Œ์ด๋ธ”]์˜ '์‚ฌ์šฉ์ž ์•„์ด๋””'์— ๋„ฃ๊ณ , 

[์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”]์˜ '์ž…์‚ฌ์ผ'์„ ๊ตฌ๋ถ„ํ•˜์—ฌ [์—ฐ์ฐจ ํ…Œ์ด๋ธ”]์˜ 'ํœด๊ฐ€ ์ผ์ˆ˜'์— ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

1๋…„ ๋ฏธ๋งŒ์ด๋ฉด ์›”๋ณ„ ํœด๊ฐ€๋ฅผ, ๊ทธ ์ด์ƒ์ด๋ฉด 15๊ฐœ์™€ ๊ทผ์† ํœด๊ฐ€๋ฅผ ๋”ฐ๋กœ ์ œ๊ณตํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

<์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค>

์–ด์ฐŒํ•˜์˜€๋“  ๊ถ๊ทน์ ์œผ๋กœ ์ทจํ•ด์•ผ ํ•  ์ฟผ๋ฆฌ๋Š” INSERT ์ด๋‹ค.

[์—ฐ์ฐจ ํ…Œ์ด๋ธ”]์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด์•ผํ•˜๋Š” ์ผ์ด๊ธฐ ๋•Œ๋ฌธ.

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ•œ ์ปฌ๋Ÿผ์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— SELECT FROM WHERE ๋ฅผ ์“ธ ๊ฒƒ์ด๋‹ค.

๋‹ค์Œ์œผ๋กœ [์—ฐ์ฐจ ํ…Œ์ด๋ธ”]์˜ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ๋“ค์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋„ฃ์–ด์ค„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, CASE WHEN THEN ELSE END ๋ฅผ ์จ ์ค„ ๊ฒƒ์ด๋‹ค.

 

 

<์ฟผ๋ฆฌ>

INSERT
	 	   INTO VCAT_TABLE (
				USER_ID				-- ์‚ฌ์šฉ์ž id
			  , TOT_VCATN_DAYCNT	-- ์ด ์—ฐ์ฐจ
			  , USE_VCATN_DAYCNT	-- ์‚ฌ์šฉํ•œ ์—ฐ์ฐจ(0์œผ๋กœ ํ•  ๊ฒƒ)
			  , YRYC_VCATN_DAYCNT	-- ๊ธฐ๋ณธ ์—ฐ์ฐจ(1๋…„ ์ดํ•˜๋ฉด ๊ฐœ์›”์ˆ˜์— ๋”ฐ๋ผ, ์ด์ƒ์ด๋ฉด 15๊ฐœ)
			  , CNWK_VCATN_DAYCNT	-- ๊ทผ์† ์—ฐ์ฐจ(1๋…„ ์ดํ•˜๋ฉด 0๊ฐœ, ์ด์ƒ์ด๋ฉด ๋…„์ˆ˜์— ๋”ฐ๋ผ)
			  , ETC_VCATN_DAYCNT	-- ๊ธฐํƒ€ ์—ฐ์ฐจ(0์œผ๋กœ ํ•  ๊ฒƒ)

	 	   )
	 	 SELECT
				USER_ID
			  , CASE
			  		WHEN <![CDATA[ TIMESTAMPDIFF(YEAR, ECNY_DE, DATE_FORMAT(now(), '%Y%m%d')) < 1 ]]>
			  		THEN MONTH(CONVERT(ecny_de,DATE))-1 + ROUND(TIMESTAMPDIFF(DAY,ECNY_DE, DATE_FORMAT(now(),'%Y%m%d') )/365*15)
			  		ELSE 15 + FLOOR(TIMESTAMPDIFF(YEAR, ecny_de, DATE_FORMAT(now(), '%Y%m%d'))/2)
			    END
			  , 0
			  , CASE
			  		WHEN <![CDATA[ TIMESTAMPDIFF(YEAR, ECNY_DE, DATE_FORMAT(now(), '%Y%m%d')) < 1 ]]>
			  		THEN MONTH(CONVERT(ecny_de,DATE))-1 + ROUND(TIMESTAMPDIFF(DAY,ECNY_DE, DATE_FORMAT(now(),'%Y%m%d') )/365*15)
			  		ELSE 15
			    END
			  , CASE
			  		WHEN <![CDATA[ TIMESTAMPDIFF(YEAR, ECNY_DE, DATE_FORMAT(now(), '%Y%m%d')) < 1 ]]>
			  		THEN 0
			  		ELSE FLOOR(TIMESTAMPDIFF(YEAR, ecny_de, DATE_FORMAT(now(), '%Y%m%d'))/2)
			    END
			  , 0

		   FROM USER_TABLE
	 	  WHERE USE_YN = 'Y'	--์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ๊ตฌ๋ถ„

 

<์ฟผ๋ฆฌ ์„ค๋ช…>

<![CDATA[             ]]> ์€ Mybatis์—์„œ xmlํŒŒ์ผ์— MariaDB ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, <> ํƒœ๊ทธ์™€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ์•Œ๋ ค์ฃผ๋Š” ํƒœ๊ทธ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ MariaDB ํ•จ์ˆ˜ ๋ชฉ๋ก์ด๋‹ค.

MONTH ํ•จ์ˆ˜๋Š” ๋‚ ์งœํ˜•์‹์˜ ๋ฐ์ดํ„ฐ์—์„œ ๋‹ฌ๋งŒ ๊บผ๋‚ด์ฃผ๋Š” ํ•จ์ˆ˜

CONVERT ํ•จ์ˆ˜๋Š” ์ŠคํŠธ๋ง์„ ํŠน์ • ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜

ROUND๋Š” ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜

TIMESTAMPDIFF๋Š” ๋‘ ๋‚ ์งœ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜

(์ฐธ๊ณ  :[MySQL, MariaDB] ๋‚ ์งœ ์ฐจ์ด, ๋…„์ฐจ ์—ฐ๋„ ๋ถ„๊ธฐ ์ฐจ์ด ๊ตฌํ•˜๊ธฐ ์ฟผ๋ฆฌ ์ด์ •๋ฆฌTIMESTAMPDIFF ์™€ DATEDIFF ์˜ˆ์ œ)

FLOOR๋Š” ๋ฒ„๋ฆผ ํ•จ์ˆ˜

 

์ด ์ฟผ๋ฆฌ๋ฅผ '์ ˆ๋Œ€์ ์œผ๋กœ ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ'๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ .. ์ฐธ๊ณ ํ•ด์„œ ๋” ์ข‹๊ณ  ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋– ์˜ฌ๋ ค๋ณด๋ฉด ์ข‹๊ฒ ๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€