聯表查詢的更新,聯表更新
背景:
之前寫過一篇關於資料庫聯表查詢的部落格《再看資料庫——(6)串連》,主要講了串連的類型,以及如何使用串連進行多表查詢。本篇部落格就是在這基礎上延伸而來的。首先,我們先來看一個聯表查詢的例子。
USE TestUnion--員工集合CREATE TABLE StaffUnion(ID INT PRIMARY KEY,NAME VARCHAR(10) NOT NULL,comment VARCHAR(30),remark INT)--員工表CREATE TABLE Staff(ID INT PRIMARY KEY,PersonNAME VARCHAR(10) NOT NULL,StaffUnionID INT,comment VARCHAR(30),remark INT)--工作計劃表CREATE TABLE StaffPlan(ID INT PRIMARY KEY,StaffID INT ,PlanName VARCHAR(10) NOT NULL,PlanContent VARCHAR(60),remark INT)
註:三個表中沒有添加外鍵約束,考慮到插入刪除資料的方便。
插入幾條簡單的資料:
INSERT INTO staffUnion VALUES (1,'test1','員工集合一',1);INSERT INTO staffUnion VALUES (2,'test2','員工集合二',1);INSERT INTO staffUnion VALUES (3,'test3','員工集合三',1);INSERT INTO Staff VALUES (1,'張三',1,'無',1);INSERT INTO Staff VALUES (2,'李四',1,'無',1);INSERT INTO Staff VALUES (3,'王五',2,'無',1);INSERT INTO Staff VALUES (4,'李明',2,'無',1);INSERT INTO StaffPlan VALUES(1,1,'編製計劃','結合年度資訊,編製計劃',1);INSERT INTO StaffPlan VALUES(2,1,'搭建環境','搭建環境,計劃五個小時',1);INSERT INTO StaffPlan VALUES(3,1,'編製計劃','結合年度資訊,編製計劃',0);
要求:
將員工集合一種的張三對應的編製計劃改為融資計劃,並且是有效資料,即remark=1。
相應的SQL語句為:
UPDATE StaffPlan SET StaffPlan.PlanName='融資計劃' FROM StaffUnion INNER JOIN Staff ON Staff.StaffUnionID=StaffUnion.IDINNER JOIN StaffPlan ON StaffPlan.StaffID=Staff.ID WHERE StaffPlan.ID=1AND StaffPlan.remark=1
結果顯示:
StaffPlan表
如果不使用這種方法,那麼我們先進行聯表查詢。
SELECT staffPlan.ID,staffPlan.PlanName,staffPlan.PlanContent,StaffPlan.remark FROM staffPlan INNER JOIN staff ON Staff.ID=StaffPlan.StaffIDINNER JOIN StaffUnion ON staffUnion.ID=Staff.StaffUnionID WHERE staffPlan.planname='編製計劃'AND StaffPlan.remark='1'
查到這條資料後,再進行更新。
UPDATE staffplan SET staffplan.planname='融資計劃' WHERE staffPlan.planname='編製計劃'AND StaffPlan.remark='1'
對比分析:
使用連表查詢再更新需要兩個sql語句來完成,而且當資料量比較大的時候,很容易出錯。