如果想要沒有資料時新增,有資料時更新或刪除,以前要先下Select來判斷Insert或Update或Delete,而Merge語法可節省這些步驟,一個語法全包了。

 

Merge是定義在Sql 2003的標準中

支援的DBMS

  • Oracle9i以上
  • MS SQL Server 2008 以上(慢了好幾年)。
  • MySql 5.0 以上

每一個DBMS都有其擴充的地方,請自行參考。

 

語法

MERGE INTO table_name USING table_name ON (condition)
WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

 

範例

1.有資料更新,沒資料新增

MERGE TableA AS target
USING (SELECT 'TestValue' ) AS source (ColumnA)
ON (target.ColumnA = source.ColumnA )
WHEN MATCHED THEN UPDATE SET ColumnA = 'TestValue'
WHEN NOT MATCHED BY TARGET THEN INSERT (ColumnA , ColumnB ) VALUES ('TestValue', 'TestValue')

2.有資料刪除,沒資料新增

MERGE TableA AS target
USING (SELECT 'TestValue' ) AS source (ColumnA)
ON (target.ColumnA = source.ColumnA )
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED BY TARGET THEN INSERT (ColumnA , ColumnB ) VALUES ('TestValue', 'TestValue')

參考資料

Merge (SQL) - Wikipedia

MERGE (Transact-SQL)

Permanent Link to MERGE command enhancements in Oracle 10g

相关文章:

  • 2021-08-20
  • 2021-10-26
  • 2022-02-15
  • 2022-12-23
  • 2021-12-24
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-11
  • 2022-12-23
  • 2021-08-30
  • 2021-12-08
  • 2021-08-27
相关资源
相似解决方案