STUFF("๋ฌธ์์ด", "์์์์น", "๋ฌธ์๊ธธ์ด", "์นํ๋ฌธ์")
์์)
SELECT a.job
, STUFF((SELECT ',' + ename
FROM emp
WHERE job = a.job
FOR XML PATH('')
), 1, 1, '') AS enames
FROM emp AS a
GROUP BY a.job
๐ ๋ฌธ์์ด(enames)์ด ,(๊ตฌ๋ถ์)๋ก ๊ตฌ๋ถ๋์ด ํ์ค์ ๋ฌธ์์ด๋ก ์ถ๋ ฅ๋๊ณ ์์
๐ฑ์ถ์ฒ : https://gent.tistory.com/344
MERGE INTO [๋์(Target)ํ ์ด๋ธ] USING [์์ค(Source) ํ ์ด๋ธ | ์๋ธ ์ฟผ๋ฆฌ] ON [์กฐ๊ฑด๋ฌธ] WHEN MATCHED THEN [์กฐ๊ฑด ์ผ์นํ ๋์ ์ฟผ๋ฆฌ] -- ๋จ, update/insert/delete ๋ง ๊ฐ๋ฅ WHEN NOT MATCHED THEN [์กฐ๊ฑด ๋ถ์ผ์นํ ๋์ ์ฟผ๋ฆฌ] -- ๋จ, update/insert/delete ๋ง ๊ฐ๋ฅ
Target ํ
์ด๋ธ๊ณผ Source ํ
์ด๋ธ ๋ชจ๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๐ MATCHED ์กฐ๊ฑด์ ํด๋น
// ํด๋น ํ์ Target ํ
์ด๋ธ์ ํ์ Updateํ๊ฑฐ๋ Delete ํ ์ ์๋ค.
Target ํ
์ด๋ธ์๋ ์กด์ฌํ์ง๋ง Source ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๐ NOT MATCHED BY SOURCE ์กฐ๊ฑด์ ํด๋น
// ํด๋น ํ์ MATCHED์ ๋ง์ฐฌ๊ฐ์ง๋ก Target ํ
์ด๋ธ์ ํ์ Updateํ๊ฑฐ๋ Delete ํ ์ ์๋ค.
Source ํ
์ด๋ธ์๋ ์กด์ฌํ์ง๋ง Target ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๐ NOT MATCHED BY TARGET ์กฐ๊ฑด์ ํด๋น
// ํด๋น ํ์ Target ํ
์ด๋ธ๋ก INSERT๋ง ๊ฐ๋ฅํ๋ค.
๋์ ํ ์ด๋ธ๊ณผ ์์ค ํ ์ด๋ธ์ ๋น๊ต(์กฐ์ธ)ํ ์กฐ๊ฑด์ ์ง์ ํ๋ค. ex) id
ON ์ ์ ์ถ๊ฐ ๊ฒ์ ์กฐ๊ฑด์ ๋ฃ์ด ๋์ ํ ์ด๋ธ์ ํ์ ํํฐ๋งํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ํ๋ ค๊ณ ํ๋ฉด ์๊ธฐ์น ์์ ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ์ ์๋ค.
๐ฑ์ถ์ฒ : https://s2choco.tistory.com/35
์์1) ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ
MERGE INTO MA_COLOR AS C
USING (SELECT 1 AS DUAL) AS D -- C์ ๋ํ ๊ฒ์ฌ๋ฅผ ํ๊ธฐ ์ํด ๋ฃ์ Dummy ๊ฐ
ON (C.COLORNO = 10)
WHEN MATCHED THEN -- ์์ ๊ฒฐ๊ณผ๊ฐ True
UPDATE SET C.COLORNM = '๋นจ๊ฐ', C.FLAG1 = '1'
WHEN NOT MATCHED THEN -- ์์ ๊ฒฐ๊ณผ๊ฐ False
INSERT(COLORNO, COLORNM, FLAG1) VALUESE(10, '๋นจ๊ฐ', '1') ;
์์2) ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ
MERGE #TEMP_A AS A -- GUBUN, COLORNO ์ปฌ๋ผ ๊ธฐ์ค ๋น๊ต
USING (SELECT STATUS, GUBUN, COLORNO, COLORNM, PRICE FROM #TEMP_B) AS B
ON (A.GUBUN = B.GUBUN AND A.COLORNO = B.COLORNO)
-- 1. GUBUN ์ปฌ๋ผ, COLORNO ์ปฌ๋ผ ๊ฐ์ด ์ผ์นํ ํ์ด ์กด์ฌํ์ง ์๊ณ , ํด๋น ํ์ STATUS ์ปฌ๋ผ์ ๊ฐ์ด '์ ์'์ผ ๊ฒฝ์ฐ
WHEN NOT MATCHED AND B.STATUS = '์ ์' THEN
INSERT (GUBUN, COLORNO, COLORNM, PRICE) VALUES (B.GUBUN, B.COLORNO, B.COLORNM, B.PRICE)
-- 2. GUBUN ์ปฌ๋ผ, COLORNO ์ปฌ๋ผ ๊ฐ์ด ์ผ์นํ ํ์ด ์กด์ฌํ๊ณ , ํด๋น ํ์ STATUS ์ปฌ๋ผ์ ๊ฐ์ด 'ํ๊ธฐ'์ผ ๊ฒฝ์ฐ
WHEN MATCHED AND B.STATUS = 'ํ๊ธฐ' THEN
UPDATE SET GUBUN = ('ํ๊ธฐํ ' + B.GUBUN)
-- 3. GUBUN ์ปฌ๋ผ, COLORNO์ปฌ๋ผ ๊ฐ์ด ์ผ์นํ ํ์ด ์กด์ฌํ๊ณ , ํด๋น ํ์ STATUS ์ปฌ๋ผ์ ๊ฐ์ด '๋ฐํ'์ผ ๊ฒฝ์ฐ
WHEN MATCHED AND B.STAUTS = '๋ฐํ' THEN
DELETE;
๐ฑ์ถ์ฒ : https://woogie-db.tistory.com/40