本文主要是介绍联表查询的更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景:
之前写过一篇关于数据库联表查询的博客《再看数据库——(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表
如果不使用这种方法,那么我们先进行联表查询。
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语句来完成,而且当数据量比较大的时候,很容易出错。
这篇关于联表查询的更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!