mysql两张关联表批量更新一张表存在数据,而另一张表不存在数据的sql
一、mysql两张关联表批量更新一张表存在、另一张表不存在的数据
创建user和user_order表
CREATE TABLE `user` (`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`id_card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '身份证号',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '名称',`mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '手机号',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户';CREATE TABLE `user_order` (`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户id',`id_card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '身份证号',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '名称',`mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '手机号',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户订单';
更新sql
需求说明:订单表中用户名称、身份证号、手机号、为空,用户表中对应的三个字段都有数据,此种情况下,需要批量更新用户订单表中为空(用户表的字段不为空)的数据,用一下sql即可解决
-- 更新
UPDATE user_order o
JOIN user u ON u.id = o.user_id
SET o.id_card = u.id_card,o.name = u.name,o.mobile = u.mobile
WHEREo.id_card IS NULL AND u.id_card IS NOT NULL AND o.name IS NULL AND u.name IS NOT NULL AND o.mobile IS NULL AND u.mobile IS NOT NULL
二、mysql 查询数据后,插入到指定表中
事例表结构
CREATE TABLE `teacher_course` (`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`teacher_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '教师名称',`course_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '课程名称',`create_time` datetime DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='教师课程表';
查询后插入
INSERT INTO teacher_course (teacher_name,course_name)
SELECT '张三' as teacher_name,course_name
FROM teacher_course where teacher_name = '张三';