背景:
之前寫過一篇關於數據庫聯表查詢的博客《再看數據庫——(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.ID INNER JOIN StaffPlan ON StaffPlan.StaffID=Staff.ID WHERE StaffPlan.ID=1 AND StaffPlan.remark=1結果顯示:
StaffPlan表
如果不使用這種方法,那麼我們先進行聯表查詢。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:sql;">SELECT staffPlan.ID,staffPlan.PlanName,staffPlan.PlanContent,StaffPlan.remark FROM staffPlan INNER JOIN staff ON Staff.ID=StaffPlan.StaffID
INNER 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語句來完成,而且當數據量比較大的時候,很容易出錯。