MySQLupdate使⽤select的结果
mysql中select
1、语法
UPDATE T1
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2,
T2.C3 = expr
WHERE condition
解析:
(1)、在UPDATE⼦句之后,指定主表(T1)和希望主表连接表(T2)。
(2)、指定⼀种要使⽤的连接,即INNER JOIN或LEFT JOIN和连接条件。JOIN⼦句必须出现在UPDATE⼦句之后。(3)、要为要更新的T1表中的列分配新值。
(4)、WHERE⼦句中的条件⽤于指定要更新的⾏。
2、⽰例
(1)、数据准备
-- 创建user表
CREATE TABLE `user` (
`id` bigint(11) NOT NULL COMMENT '主键ID',
`name` varchar(30) NOT NULL COMMENT '姓名',
`age` int(11) NOT NULL COMMENT '年龄',
`email` varchar(50) NOT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插⼊数据
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('1', 'jane', '18', 'test1@baomidou');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('2', 'Jack', '20', 'test2@baomidou');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('3', 'Tom', '28', 'test3@baomidou');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('4', 'Sandy', '21', 'test4@baomidou');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('5', 'Billie', '24', 'test5@baomidou');
-- 创建user_temp表
CREATE TABLE `user_temp` (
`id` bigint(11) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`apply_id` int(11) DEFAULT NULL,
`user_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插⼊数据
INSERT INTO `mybaits-plus`.`user_temp` (`id`, `name`, `age`, `email`, `apply_id`, `user_id`) VALUES ('1', NULL, '20', NULL, '1', '1');
(2)、将user_temp表中的数据更新到user表中对应的数据
update user u inner join (select user_id, name,age,email from user_temp where apply_id = 1)b on u.id = b.user_id
set u.name = ifnull(b.name,u.name),
u.age = ifnull(b.age,u.age),
(3)、结果