SQL Server 中如何从 SELECT 进行 UPDATE

如何编写一个查询,通过使用带有示例的 SELECT 语句在表中 UPDATE 列?此 SQL Server 中的 UPDATE FROM SELECT 是一个常见问题。在本例中,我们将使用下面显示的数据。

Employee Data 1

下表将显示 Employee Duplicate 表中的数据。我们的任务是使用上面指定的表更新此表中的列(firstname、lastname 和 Yearly Income)。

Duplicate records 2

SQL Server 中如何从 SELECT 进行 UPDATE 示例?

在此示例中,我们将向您展示如何使用 UPDATE 语句和 SELECT 语句以及 子查询

UPDATE [EmployeeDuplicates]
   SET [YearlyIncome] = ( SELECT [YearlyIncome] 
			  FROM [Employee]
			  WHERE [Employee].EmpID = [EmployeeDuplicates].EmpID)
 
GO
Messages
--------
(14 row(s) affected)

现在我将向您展示 SQL Server 更新后的表

How to UPDATE from SELECT in SQL Server 4

UPDATE FROM SELECT 示例 2

上述示例可能是更新单个列的一个很好的选择。在此 UPDATE SELECT 示例中,让我们看看如何在服务器中使用 JOIN 进行 UPDATE 语句。

UPDATE [EmpDup]
   SET [EmpDup].[FirstName] = [Emp].[FirstName],
	   [EmpDup].[LastName] = [Emp].[LastName],
	   [EmpDup].[YearlyIncome] = [Emp].[YearlyIncome]
FROM [EmployeeDuplicates] AS [EmpDup]
INNER JOIN [Employee] AS [Emp] 
   ON [EmpDup].EmpID = [Emp].EmpID 
WHERE [EmpDup].EmpID = [Emp].EmpID 
GO

现在我将向您展示更新后的表

View Employee Records 6

SQL UPDATE SELECT 示例 3

在本例中,我们展示了如何使用 SELECT 语句更新表列。在这里,我们在 FROM 语句中使用 子查询

UPDATE [EmployeeDuplicates]
   SET [FirstName] = [Emp].[FirstName],
	   [LastName] = [Emp].[LastName],
	   [YearlyIncome] = [Emp].[YearlyIncome]
FROM (SELECT EmpID,
	     [FirstName], 
	     [LastName],
	     [YearlyIncome] 
       FROM [Employee]
     ) [Emp] 
WHERE [EmployeeDuplicates].EmpID = [Emp].EmpID 
GO
How to UPDATE from SELECT 9

现在我将向您展示更新后的表

SQL Server 中如何从 SELECT 进行 UPDATE 示例 4

在本例中,我们将向您展示,如何使用服务器中的 MERGE Statement 从 SELECT 语句更新表列。

MERGE INTO [EmployeeDuplicates] AS [EmpDup]
   USING (
           SELECT EmpID,
		  [FirstName], 
		  [LastName],
		  [YearlyIncome] 
           FROM [Employee] 
         ) [Emp]
   ON [EmpDup].EmpID = [Emp].EmpID
WHEN MATCHED THEN
   UPDATE 
  	SET [EmpDup].[FirstName] = [Emp].[FirstName],
	    [EmpDup].[LastName] = [Emp].[LastName],
	    [EmpDup].[YearlyIncome] = [Emp].[YearlyIncome];

运行上面的 merge update from the select query

Messages
--------
(14 row(s) affected)

现在我将向您展示使用此 update from the select 语句更新后的表。