CREATE TABLE `t_order` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_id` int(11) DEFAULT NULL COMMENT '商品id',
`product_name` varchar(32) DEFAULT NULL COMMENT '商品名称',
`amout` decimal(10,2) DEFAULT NULL COMMENT '订单金额',
`order_time` timestamp NULL DEFAULT NULL COMMENT '下单时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`product_name` varchar(32) DEFAULT NULL COMMENT '商品名称',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
再插入一些简单的测试数据:
INSERT INTO `t_order` VALUES ('1', '1', '科幻图书', '25.00', '2023-08-21 17:16:54');
INSERT INTO `t_order` VALUES ('2', '2', '台灯', '12.00', '2023-08-21 17:17:22');
INSERT INTO `t_order` VALUES ('3', '128', '篮球', '82.00', '2023-08-21 17:18:18');
INSERT INTO `t_product` VALUES ('1', '编程书籍', '2023-08-21 17:15:24');
INSERT INTO `t_product` VALUES ('2', '电饭锅', '2023-08-21 17:15:27');
INSERT INTO `t_product` VALUES ('3', '加薪神器', '2023-08-21 17:16:00');
执行上面的sql后,表中的数据是这样的:
UPDATE t_order o
INNER JOIN t_product p ON o.product_id=p.id
SET o.product_name=p.product_name
UPDATE t_order t
SET t.product_name =
(SELECT product_name FROM t_product p WHERE t.product_id = p.id)
更新操作也是影响了三行数据,同时,对于product_id=128的数据,它的商品名称更新为NULL值,跟LEFT JOIN的效果一样:

UPDATE t_order o, t_product p
SET o.product_name=p.product_name
WHERE o.product_id=p.id

推荐阅读:
原文始发于微信公众号(互联网全栈架构):MySQL如何进行表之间的关联更新
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/173649.html