T-SQL筆記23_Update from 語法

 


由於系統絕大部分商業邏輯都包覆在Stored Procedure中
因此也時常捕獲到以前根本不會接觸過的一些很稀有的T-SQL寫法


最近看到一個update 語句讓我有愣一下
原來update 還能這樣下...


這裡準備一些測試用資料

 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
32
33
34
35
36
37
38
CREATE TABLE dbo.Persons
( PersonId       INT
  PRIMARY KEY IDENTITY(1, 1) NOT NULL, 
  PersonName     VARCHAR(100) NULL, 
  PersonLastName VARCHAR(100) NULL, 
  PersonPostCode VARCHAR(100) NULL, 
  PersonCityName VARCHAR(100) NULL)
 
GO
 
CREATE TABLE  AddressList(
  [AddressId] [int]  PRIMARY KEY IDENTITY(1,1) NOT NULL,
  [PersonId] [int] NULL,
  [PostCode] [varchar](100) NULL,
  [City] [varchar](100) NULL)
 
GO
 
INSERT INTO Persons
(PersonName, PersonLastName )
VALUES
(N'Salvador', N'Williams'),
(N'Lawrence', N'Brown'),
( N'Gilbert', N'Jones'),
( N'Ernest', N'Smith'),
( N'Jorge', N'Johnson')
 
GO
INSERT INTO AddressList
(PersonId, PostCode, City)
VALUES
(1, N'07145', N'Philadelphia'),
(2, N'68443', N'New York'),
(3, N'50675', N'Phoenix'),
(4, N'96573', N'Chicago')
 
SELECT * FROM Persons
SELECT * FROM AddressList






今天情境我想要去update Persons這張欄位為null的部分
而資料要從AddressList去設定
這是就會需要透過 update from 搭配join的語法來去做update
由於PersonId對於AddressList來說是FK可關聯的到
藉此用其來join得到要去更新的資料內容

1
2
3
4
5
6
7
8
UPDATE Per 
SET 
Per.PersonCityName=Addr.City, 
Per.PersonPostCode=Addr.PostCode
FROM Persons Per
INNER JOIN
AddressList Addr
ON Per.PersonId = Addr.PersonId




以上是本次日常小分享






Ref:
How to UPDATE from a SELECT statement in SQL Server
https://www.sqlshack.com/how-to-update-from-a-select-statement-in-sql-server/

SQL UPDATE FROM 的使用方法
http://www.frogjumpjump.com/2011/09/sql-update-from.html










留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header