@@ -4,23 +4,23 @@ title: MERGE
44
55import FunctionDescription from '@site/src /components/FunctionDescription';
66
7- <FunctionDescription description =" Introduced or updated : v1.2.241" />
7+ <FunctionDescription description =" ๅผๅ
ฅๆๆดๆฐไบ : v1.2.241" />
88
9- ๆ นๆฎ่ฏญๅฅไธญๆๅฎ็ๆกไปถๅๅน้
ๆ ๅ๏ผไฝฟ็จๆๅฎๆบไธญ็ๆฐๆฎๅฏน็ฎๆ ่กจไธญ็่กๆง่ก INSERTใ UPDATE ๆ DELETE ๆไฝใ
9+ ๅจ็ฎๆ ่กจไธญๆง่ก ** INSERT** ใ ** UPDATE** ๆ ** DELETE** ๆไฝ๏ผๆๆๆไฝ้ฝๆ นๆฎ่ฏญๅฅไธญๆๅฎ็ๆกไปถๅๅน้
ๆกไปถ่ฟ่ก๏ผไฝฟ็จๆฅ่ชๆๅฎๆบ็ๆฐๆฎ ใ
1010
11- ๆฐๆฎๆบ๏ผ ๅฏไปฅๆฏๅญๆฅ่ฏข๏ผ ้่ฟ JOIN ่กจ่พพๅผ้พๆฅๅฐ็ฎๆ ๆฐๆฎใๆญค่กจ่พพๅผ่ฏไผฐๆบไธญ็ๆฏไธ่กๆฏๅฆๅฏไปฅๅจ็ฎๆ ่กจไธญๆพๅฐๅน้
้กน๏ผ็ถๅ็กฎๅฎๅฎๅบ่ฏฅ็งปๅจๅฐไธไธไธชๆง่กๆญฅ้ชคไธญ็ๅช็ง็ฑปๅ็ๅญๅฅ๏ผ MATCHED ๆ NOT MATCHED๏ผ ใ
11+ ๆฐๆฎๆบ ( ๅฏไปฅๆฏๅญๆฅ่ฏข) ้่ฟ JOIN ่กจ่พพๅผไธ็ฎๆ ๆฐๆฎๅ
ณ่ใๆญค่กจ่พพๅผ่ฏไผฐๆบไธญ็ๆฏไธ่กๆฏๅฆ่ฝๅจ็ฎๆ ่กจไธญๆพๅฐๅน้
้กน๏ผ็ถๅ็กฎๅฎๅจไธไธไธชๆง่กๆญฅ้ชคไธญๅบ่ฏฅ็งปๅจๅฐๅช็ง็ฑปๅ็ๅญๅฅ ( MATCHED ๆ NOT MATCHED) ใ
1212
1313![ Alt text] ( /img/sql/merge-into-single-clause.jpeg )
1414
15- MERGE ่ฏญๅฅ้ๅธธๅ
ๅซ MATCHED ๅ/ๆ NOT MATCHED ๅญๅฅ๏ผๆ็คบ Databend ๅฆไฝๅค็ๅน้
ๅไธๅน้
็ๆ
ๅต ใๅฏนไบ MATCHED ๅญๅฅ๏ผๆจๅฏไปฅ้ๆฉๅฏน็ฎๆ ่กจๆง่ก UPDATE ๆ DELETE ๆไฝใ็ธๅ๏ผๅฏนไบ NOT MATCHED ๅญๅฅ๏ผๅฏ็จ็้ๆฉๆฏ INSERTใ
15+ MERGE ่ฏญๅฅ้ๅธธๅ
ๅซ MATCHED ๅ/ๆ NOT MATCHED ๅญๅฅ๏ผๆ็คบ Databend ๅฆไฝๅค็ๅน้
ๅไธๅน้
็ๅบๆฏ ใๅฏนไบ MATCHED ๅญๅฅ๏ผๆจๅฏไปฅ้ๆฉๅจ็ฎๆ ่กจไธๆง่ก ** UPDATE** ๆ ** DELETE** ๆไฝใ็ธๅ๏ผๅฏนไบ NOT MATCHED ๅญๅฅ๏ผๅฏ็จ็้ๆฉๆฏ ** INSERT** ใ
1616
1717## ๅคไธช MATCHED ๅ NOT MATCHED ๅญๅฅ
1818
19- MERGE ่ฏญๅฅๅฏไปฅๅ
ๅซๅคไธช MATCHED ๅ/ๆ NOT MATCHED ๅญๅฅ๏ผไฝฟๆจๅฏไปฅ็ตๆดปๅฐๆ นๆฎ MERGE ๆไฝๆ้ดๆปก่ถณ็ๆกไปถๆๅฎ่ฆๆง่ก็ไธๅๆไฝใ
19+ MERGE ่ฏญๅฅๅฏไปฅๅ
ๅซๅคไธช MATCHED ๅ/ๆ NOT MATCHED ๅญๅฅ๏ผไธบๆจๆไพ็ตๆดปๆง๏ผๅฏไปฅๆ นๆฎ MERGE ๆไฝๆ้ดๆปก่ถณ็ๆกไปถๆๅฎ่ฆๆง่ก็ไธๅๆไฝใ
2020
2121![ Alt text] ( /img/sql/merge-into-multi-clause.jpeg )
2222
23- ๅฆๆ MERGE ่ฏญๅฅๅ
ๅซๅคไธช MATCHED ๅญๅฅ๏ผๅ้่ฆไธบ้คๆๅไธไธชๅญๅฅไนๅค็ๆฏไธชๅญๅฅๆๅฎไธไธชๆกไปถ ใ่ฟไบๆกไปถ็กฎๅฎๆง่ก็ธๅ
ณๆไฝ็ๆ ๅใDatabend ๆ็
งๆๅฎ็้กบๅบ่ฏไผฐๆกไปถ ใไธๆฆๆปก่ถณๆกไปถ๏ผๅฎๅฐ่งฆๅๆๅฎ็ๆไฝ ๏ผ่ทณ่ฟไปปไฝๅฉไฝ็ MATCHED ๅญๅฅ๏ผ็ถๅ็งปๅจๅฐๆบไธญ็ไธไธ่กใๅฆๆ MERGE ่ฏญๅฅ่ฟๅ
ๅซๅคไธช NOT MATCHED ๅญๅฅ๏ผๅ Databend ไปฅ็ฑปไผผ็ๆนๅผๅค็ๅฎไปฌ ใ
23+ ๅฆๆ MERGE ่ฏญๅฅๅ
ๅซๅคไธช MATCHED ๅญๅฅ๏ผ้คไบๆๅไธไธชๅญๅฅๅค๏ผๆฏไธชๅญๅฅ้ฝ้่ฆๆๅฎไธไธชๆกไปถ ใ่ฟไบๆกไปถ็กฎๅฎๆง่ก็ธๅ
ณๆไฝ็ๆ ๅใDatabend ๆๆๅฎ้กบๅบ่ฏไผฐๆกไปถ ใไธๆฆๆปก่ถณๆกไปถ๏ผๅฎๅฐฑไผ่งฆๅๆๅฎ็ๆไฝ ๏ผ่ทณ่ฟไปปไฝๅฉไฝ็ MATCHED ๅญๅฅ๏ผ็ถๅ็งปๅจๅฐๆบไธญ็ไธไธ่กใๅฆๆ MERGE ่ฏญๅฅ่ฟๅ
ๅซๅคไธช NOT MATCHED ๅญๅฅ๏ผDatabend ไผไปฅ็ฑปไผผ็ๆนๅผๅค็ๅฎไปฌ ใ
2424
2525## ่ฏญๆณ
2626
@@ -30,43 +30,48 @@ MERGE INTO <target_table>
3030
3131matchedClause ::=
3232 WHEN MATCHED [ AND < condition> ] THEN
33- { UPDATE SET < col_name> = < expr> [ , < col_name2> = < expr2> ... ] | UPDATE * | DELETE }
33+ {
34+ UPDATE SET < col_name> = < expr> [ , < col_name2> = < expr2> ... ] |
35+ UPDATE * |
36+ DELETE /* ไป็ฎๆ ่กจไธญๅ ้คๅน้
็่ก */
37+ }
3438
3539notMatchedClause ::=
3640 WHEN NOT MATCHED [ AND < condition> ] THEN
3741 { INSERT ( < col_name> [ , < col_name2> ... ] ) VALUES ( < expr> [ , ... ] ) | INSERT * }
3842```
3943
40- | ๅๆฐ | ๆ่ฟฐ |
44+ | ๅๆฐ | ๆ่ฟฐ |
4145| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
42- | UPDATE \* | ไฝฟ็จๆบไธญ็ธๅบ่ก็ๅผๆดๆฐ็ฎๆ ่กจไธญๅน้
่ก็ๆๆๅใ่ฟ่ฆๆฑๆบๅ็ฎๆ ไน้ด็ๅๅไธ่ด๏ผๅฐฝ็ฎกๅฎไปฌ็้กบๅบๅฏ่ฝไธๅ๏ผ๏ผๅ ไธบๅจๆดๆฐ่ฟ็จไธญ๏ผๅน้
ๆฏๅบไบๅๅๅฎๆ็ใ |
43- | INSERT \* | ไฝฟ็จๆบ่ก็ๅผๅฐๆฐ่กๆๅ
ฅๅฐ็ฎๆ ่กจไธญใ |
46+ | UPDATE \* | ไฝฟ็จๆบไธญ็ธๅบ่ก็ๅผๆดๆฐ็ฎๆ ่กจไธญๅน้
่ก็ๆๆๅใ่ฟ่ฆๆฑๆบๅ็ฎๆ ไน้ด็ๅๅไธ่ด (ๅฐฝ็ฎกๅฎไปฌ็้กบๅบๅฏไปฅไธๅ)๏ผๅ ไธบๅจๆดๆฐ่ฟ็จไธญ๏ผๅน้
ๆฏๅบไบๅๅ่ฟ่ก็ใ |
47+ | INSERT \* | ไฝฟ็จๆบ่ก็ๅผๅ็ฎๆ ่กจๆๅ
ฅๆฐ่กใ |
48+ | DELETE | ไป็ฎๆ ่กจไธญๅ ้คๅน้
็่กใ่ฟๆฏไธไธชๅผบๅคง็ๆไฝ๏ผๅฏ็จไบๆฐๆฎๆธ
็ใๅ ้ค่ฟๆถ่ฎฐๅฝๆๅบไบๆบๆฐๆฎๅฎ็ฐๆกไปถๅ ้ค้ป่พใ |
4449
4550## ่พๅบ
4651
47- MERGE ๆไพไบๆฐๆฎๅๅนถ็ปๆ็ๆ่ฆ๏ผๅ
ถไธญๅ
ๅซไปฅไธๅ ๏ผ
52+ MERGE ๆไพๆฐๆฎๅๅนถ็ปๆ็ๆ่ฆ๏ผๅ
ๅซไปฅไธๅ ๏ผ
4853
49- | ๅ | ๆ่ฟฐ |
54+ | ๅ | ๆ่ฟฐ |
5055| ----------------------- | ---------------------------------------------------- |
51- | number of rows inserted | ๆทปๅ ๅฐ็ฎๆ ่กจ็ๆฐ่กๆฐใ |
52- | number of rows updated | ็ฎๆ ่กจไธญไฟฎๆน็็ฐๆ่กๆฐใ |
53- | number of rows deleted | ไป็ฎๆ ่กจไธญๅ ้ค็่กๆฐใ |
56+ | number of rows inserted | ๆทปๅ ๅฐ็ฎๆ ่กจ็ๆฐ่กๆฐใ |
57+ | number of rows updated | ็ฎๆ ่กจไธญไฟฎๆน็็ฐๆ่กๆฐใ |
58+ | number of rows deleted | ไป็ฎๆ ่กจไธญๅ ้ค็่กๆฐใ |
5459
5560## ็คบไพ
5661
57- ### ็คบไพ 1๏ผๅๅนถๅ
ทๆๅคไธชๅน้
ๅญๅฅ
62+ ### ็คบไพ 1: ไฝฟ็จๅคไธช Matched ๅญๅฅ่ฟ่กๅๅนถ
5863
59- ๆญค็คบไพไฝฟ็จ MERGE ๅฐๅๅทฅๆฐๆฎไปโ employeesโ ๅๆญฅๅฐโ salariesโ๏ผไป่ๅฏไปฅๆ นๆฎๆๅฎ็ๆ ๅๆๅ
ฅๅๆดๆฐๅทฅ่ตไฟกๆฏ ใ
64+ ๆญค็คบไพไฝฟ็จ MERGE ๅฐๅๅทฅๆฐๆฎไป ' employees' ๅๆญฅๅฐ ' salaries'๏ผๅ
่ฎธๆ นๆฎๆๅฎๆกไปถๆๅ
ฅๅๆดๆฐ่ช่ตไฟกๆฏ ใ
6065
6166``` sql
62- -- ๅๅปบโ employeesโ ่กจไฝไธบๅๅนถ็ๆบ
67+ -- ๅๅปบ ' employees' ่กจไฝไธบๅๅนถ็ๆบ
6368CREATE TABLE employees (
6469 employee_id INT ,
6570 employee_name VARCHAR (255 ),
6671 department VARCHAR (255 )
6772);
6873
69- -- ๅๅปบโ salariesโ ่กจไฝไธบๅๅนถ็็ฎๆ
74+ -- ๅๅปบ ' salaries' ่กจไฝไธบๅๅนถ็็ฎๆ
7075CREATE TABLE salaries (
7176 employee_id INT ,
7277 salary DECIMAL (10 , 2 )
@@ -79,14 +84,15 @@ INSERT INTO employees VALUES
7984 (3 , ' Charlie' , ' Finance' ),
8085 (4 , ' David' , ' HR' );
8186
82- -- ๆๅ
ฅๅๅงๅทฅ่ตๆฐๆฎ
87+ -- ๆๅ
ฅๅๅง่ช่ตๆฐๆฎ
8388INSERT INTO salaries VALUES
8489 (1 , 50000 .00 ),
8590 (2 , 60000 .00 );
8691
8792-- ๅฏ็จ MERGE INTO
8893
89- -- ๆ นๆฎโemployeesโไธญ็ๅๅทฅ่ฏฆ็ปไฟกๆฏๅฐๆฐๆฎๅๅนถๅฐโsalariesโไธญ
94+ ` ` ` sql
95+ -- ๅบไบ 'employees' ่กจไธญ็ๅๅทฅ่ฏฆ็ปไฟกๆฏๅฐๆฐๆฎๅๅนถๅฐ 'salaries' ่กจไธญ
9096MERGE INTO salaries
9197 USING (SELECT * FROM employees) AS employees
9298 ON salaries.employee_id = employees.employee_id
@@ -106,7 +112,7 @@ MERGE INTO salaries
106112โ 2 โ 2 โ
107113โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
108114
109- -- ๅๅนถๅไปโ salariesโ ่กจไธญๆฃ็ดขๆๆ่ฎฐๅฝ
115+ -- ๅๅนถๅไป ' salaries' ่กจไธญๆฃ็ดขๆๆ่ฎฐๅฝ
110116SELECT * FROM salaries;
111117
112118โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
@@ -119,9 +125,9 @@ SELECT * FROM salaries;
119125โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
120126` ` `
121127
122- ### ็คบไพ 2๏ผๅๅนถๅ
ทๆ UPDATE \ * ๅ INSERT \*
128+ # ## ็คบไพ 2: ไฝฟ็จ UPDATE * ๅ INSERT * ่ฟ่กๅๅนถ
123129
124- ๆญค็คบไพไฝฟ็จ MERGE ๅจ target_table ๅ source_table ไน้ดๅๆญฅๆฐๆฎ๏ผไฝฟ็จๆบไธญ็ๅผๆดๆฐๅน้
็่ก ๏ผๅนถๆๅ
ฅไธๅน้
็่กใ
130+ ๆญค็คบไพไฝฟ็จ MERGE ๅจ target_table ๅ source_table ไน้ดๅๆญฅๆฐๆฎ๏ผไฝฟ็จๆบ่กจไธญ็ๅผๆดๆฐๅน้
็่ก ๏ผๅนถๆๅ
ฅไธๅน้
็่กใ
125131
126132` ` ` sql
127133-- ๅๅปบ็ฎๆ ่กจ target_table
@@ -132,7 +138,7 @@ CREATE TABLE target_table (
132138 City VARCHAR(50)
133139);
134140
135- -- ๅฐๅๅงๆฐๆฎๆๅ
ฅๅฐ target_table ไธญ
141+ -- ๅ target_table ๆๅ
ฅๅๅงๆฐๆฎ
136142INSERT INTO target_table (ID, Name, Age, City)
137143VALUES
138144 (1, 'Alice', 25, 'Toronto'),
@@ -147,16 +153,16 @@ CREATE TABLE source_table (
147153 City VARCHAR(50)
148154);
149155
150- -- ๅฐๅๅงๆฐๆฎๆๅ
ฅๅฐ source_table ไธญ
156+ -- ๅ source_table ๆๅ
ฅๅๅงๆฐๆฎ
151157INSERT INTO source_table (ID, Name, Age, City)
152158VALUES
153159 (1, 'David', 27, 'Calgary'),
154160 (2, 'Emma', 29, 'Ottawa'),
155161 (4, 'Frank', 32, 'Edmonton');
156162
157- -- ๅฏ็จ MERGE INTO
163+ -- Enable MERGE INTO
158164
159- -- ๅฐๆฐๆฎไป source_table ๅๅนถๅฐ target_table ไธญ
165+ -- ๅฐ source_table ไธญ็ๆฐๆฎๅๅนถๅฐ target_table ไธญ
160166MERGE INTO target_table AS T
161167 USING (SELECT * FROM source_table) AS S
162168 ON T.ID = S.ID
@@ -171,7 +177,7 @@ MERGE INTO target_table AS T
171177โ 1 โ 2 โ
172178โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
173179
174- -- ๅๅนถๅไปโ target_tableโ ไธญๆฃ็ดขๆๆ่ฎฐๅฝ
180+ -- ๅๅนถๅไป ' target_table' ไธญๆฃ็ดขๆๆ่ฎฐๅฝ
175181SELECT * FROM target_table order by ID;
176182
177183โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
@@ -182,4 +188,53 @@ SELECT * FROM target_table order by ID;
182188โ 3 โ Carol โ 28 โ Montreal โ
183189โ 4 โ Frank โ 32 โ Edmonton โ
184190โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
191+ ` ` `
192+
193+ # ## ็คบไพ 3: ไฝฟ็จ DELETE ๆไฝ่ฟ่กๅๅนถ
194+
195+ ๆญค็คบไพๆผ็คบๅฆไฝไฝฟ็จ MERGE ๆ นๆฎๆบ่กจไธญ็็นๅฎๆกไปถไป็ฎๆ ่กจไธญๅ ้ค่ฎฐๅฝใ
196+
197+ ` ` ` sql
198+ -- ๅๅปบ customers ่กจ (็ฎๆ ่กจ)
199+ CREATE TABLE customers (
200+ customer_id INT,
201+ customer_name VARCHAR(50),
202+ status VARCHAR(20),
203+ last_purchase_date DATE
204+ );
205+
206+ -- ๆๅ
ฅๅๅงๅฎขๆทๆฐๆฎ
207+ INSERT INTO customers VALUES
208+ (101, 'John Smith', 'Active', '2023-01-15'),
209+ (102, 'Emma Johnson', 'Active', '2023-02-20'),
210+ (103, 'Michael Brown', 'Inactive', '2022-11-05'),
211+ (104, 'Sarah Wilson', 'Active', '2023-03-10'),
212+ (105, 'David Lee', 'Inactive', '2022-09-30');
213+
214+ -- ๅๅปบ removals ่กจ (ๅ
ๅซ่ฆๅ ้คๅฎขๆท็ๆบ่กจ)
215+ CREATE TABLE removals (
216+ customer_id INT,
217+ removal_reason VARCHAR(50),
218+ removal_date DATE
219+ );
220+
221+ -- ไธบ่ฆๅ ้ค็ๅฎขๆทๆๅ
ฅๆฐๆฎ
222+ INSERT INTO removals VALUES
223+ (103, 'Account Closed', '2023-04-01'),
224+ (105, 'Customer Request', '2023-04-05');
225+
226+ -- Enable MERGE INTO
227+
228+ -- ไฝฟ็จ MERGE ๅ ้คๅบ็ฐๅจ removals ่กจไธญ็้ๆดป่ทๅฎขๆท
229+ MERGE INTO customers AS c
230+ USING removals AS r
231+ ON c.customer_id = r.customer_id
232+ WHEN MATCHED AND c.status = 'Inactive' THEN
233+ DELETE;
234+
235+ โโโโโโโโโโโโโโโโโโโโโโโโโโ
236+ โ number of rows deleted โ
237+ โโโโโโโโโโโโโโโโโโโโโโโโโโค
238+ โ 2 โ
239+ โโโโโโโโโโโโโโโโโโโโโโโโโโ
185240` ` `
0 commit comments