MySQL update使用select的结果

参考地址:https://www.jianshu.com/p/60b3f987c477

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 JOINLEFT 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.com');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('2', 'Jack', '20', 'test2@baomidou.com');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('3', 'Tom', '28', 'test3@baomidou.com');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('4', 'Sandy', '21', 'test4@baomidou.com');
INSERT INTO `mybaits-plus`.`user` (`id`, `name`, `age`, `email`) VALUES ('5', 'Billie', '24', 'test5@baomidou.com');

-- 创建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),
        u.email = ifnull(b.email,u.email)

(3)、结果

 

posted @ 2020-05-14 09:23  炫舞风中  阅读(2362)  评论(0编辑  收藏  举报