SQL 请教如何通过中间查询结果填充数据?

已知系统存在设备类别表(device_category)与设备表(device)
设备类别表

CREATE TABLE device_category (
  `id` INT(11),
  `name` VARCHAR(100),
  PRIMARY KEY (`id`)
);
INSERT INTO device_category(`id`, `name`) VALUES(1,'巡检');
INSERT INTO device_category(`id`, `name`) VALUES(2,'保养');
INSERT INTO device_category(`id`, `name`) VALUES(3,'维修');

设备表

CREATE TABLE device (
  `id` INT(11),
  `name` VARCHAR(100),
  `device_category_id` INT(11),
  PRIMARY KEY (`id`)
);
INSERT INTO device(`id`, `name`, `device_category_id`) VALUES(1,'巡检设备1',1);
INSERT INTO device(`id`, `name`, `device_category_id`) VALUES(2,'巡检设备2',1);
INSERT INTO device(`id`, `name`, `device_category_id`) VALUES(3,'保养设备1',2);
INSERT INTO device(`id`, `name`, `device_category_id`) VALUES(4,'维修设备1',3);
INSERT INTO device(`id`, `name`, `device_category_id`) VALUES(5,'维修设备2',3);

初始需求
如果需要查询设备关联的类别,可通过 device.device_category_id 关联 device_cagetory.id 拿到 device_category.name

需求变更
如果需求变更为 device 冗余存储 device_category_name 字段,例如 device_category_name VARCHAR(100),请问如何通过 SQL 填充新增的 device.device_category_name 字段的数据

阅读 2.5k
2 个回答

方才那个有误~。

执行任何操作前请先备份。

-- 添加列
alter table device add column device_category_name varchar(100);

-- 更新数据
update device, device_category as dc set device.device_category_name = dc.name where dc.id = device_category_id;

SET SQL_SAFE_UPDATES = 0;//直接执行下面代码可能报错,需要关闭安全模式
update device,device_category set device.device_category_name = device_category.name where device_category.id=device.device_category_id;

不同数据库的多表update方法有点差别

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题