如何在 SQL Server 中使用一條語句更新兩個表?


簡介

SQL Server 中,您有時可能需要同時更新多個表中的資料。這可以透過使用單個 UPDATE 語句 來實現,它允許您在一個查詢中更新多個表。

要在一個語句中更新兩個表,您可以使用帶 JOIN 子句UPDATE 語句。JOIN 子句允許您根據公共列或列集指定要更新的兩個表之間的關係。

定義

術語“在一個語句中更新兩個表”指的是在 SQL Server 中使用單個 UPDATE 語句同時更新兩個表中的資料的過程。

在 SQL Server 中,UPDATE 語句用於修改表中的資料。預設情況下,UPDATE 語句一次更新一個表。但是,您可以在 UPDATE 語句中使用 JOIN 子句在一個語句中更新兩個表。

JOIN 子句允許您根據公共列或列集指定要更新的兩個表之間的關係。這使您能夠根據指定的條件同時更新兩個表中的資料。

例如,您可以使用帶 JOIN 子句的 UPDATE 語句更新特定部門中所有員工的薪資,或更新特定區域中所有客戶的地址。

總的來說,在一個語句中更新兩個表的概念在您需要同時更新多個表中的資料並且這些表基於公共列或列集具有關係時非常有用。這可以幫助您避免編寫多個 UPDATE 語句或使用其他技術(例如遊標或迴圈)。

語法

UPDATE table1
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON table1.common_column = table2.common_column
WHERE condition;
UPDATE table2
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON table1.common_column = table2.common_column
WHERE condition;

這將使用 JOIN 子句的 ON 子句中指定的公共列更新 table1 和 table2。WHERE 子句是可選的,可用於為更新指定其他條件。

需要考慮的重要事項

  • 確保兩個表具有可用於連線表的公共列或列集。此公共列將用於在 UPDATE 語句的 JOIN 子句中指定兩個表之間的關係。

  • 使用 SET 子句指定要在每個表中更新的列和值。您可以透過逗號分隔賦值來同時更新多個列。

  • 使用 WHERE 子句指定更新的任何其他條件。這可以用於縮小將在每個表中更新的行。

  • 在同時更新多個表中的資料時要小心。如果您的 UPDATE 語句中存在錯誤,您最終可能會更新比預期更多的行,或更新錯誤的值。在將 UPDATE 語句應用於生產資料庫之前,最好在測試資料庫上對其進行測試。

  • 如果您想在一個語句中更新多個表並且這些表沒有公共列,則可以在 UPDATE 語句中使用子查詢來達到相同的效果。但是,此技術可能更復雜,並且與使用 JOIN 子句相比,效能可能更差。

示例 - 1

SQL 查詢

UPDATE Table1 SET name = 'John', country = 'USA' FROM Table1 JOIN Table2 ON Table1.user_id = Table2.user_id WHERE Table2.department = 'IT';

此 UPDATE 語句將更新 Table1 中所有在 Table2 中部門為“IT”的行中的 name 和 country 列。JOIN 子句根據 user_id 列指定兩個表之間的關係。

示例 - 2

SQL 查詢

UPDATE Table2 SET salary = salary * 1.1 FROM Table1 JOIN Table2 ON Table1.user_id = Table2.user_id WHERE Table1.country = 'USA';

此 UPDATE 語句將 Table2 中所有在 Table1 中國家為“美國”的行中的 salary 列增加 10%。JOIN 子句根據 user_id 列指定兩個表之間的關係。

示例 - 3

SQL 查詢

UPDATE Table1 SET name = 'John', country = 'USA' FROM Table1 JOIN Table2 ON Table1.user_id = Table2.user_id WHERE Table2.department = 'IT' AND Table1.country >< 'USA'; UPDATE Table2 SET salary = salary * 1.1 FROM Table1 JOIN Table2 ON Table1.user_id = Table2.user_id WHERE Table1.country = 'USA';

此示例將前兩個示例組合到一個語句中。它將更新 Table1 中所有在 Table2 中部門為“IT”的行中的 name 和 country 列,並將 Table2 中所有在 Table1 中國家為“美國”的行中的 salary 列增加 10%。JOIN 子句根據 user_id 列指定兩個表之間的關係。

結論

當您需要同時更新多個表中的資料並且這些表基於公共列或列集具有關係時,這可能很有用。

更新於: 2023-09-14

47K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.