我刚刚完成了一些数据库更改,现在我需要迁移数据以适应新设计。
我们有一张带有分类栏的车辆表。分类列是有人在字段中输入的字符串。这不是一个外键专栏。
现在,我更改了设计以允许车辆具有多个分类(是的,业务规则允许这样),并且分类被移动到查找表。分类栏将从车辆表中删除,替换为M:M连接表,以启用每个车辆要求的多个类别。分类表是使用车辆表中分类列的唯一值构建的。
关于这个问题。如何构建M:M表?执行此操作的SQL是什么?
在我看来,过程将是:对于车辆表中的每一行b)在新分类表中查找分类字符串c)将分类ID和车辆ID插入到VehiclesClassifications表中。然后,在检查数据后,我将手动从车辆表中删除分类列。
感谢您的任何建议!
编辑1:我创建了表格。我只是绊倒SQL语句。
答案 0 :(得分:0)
如何构建M:M表?
猜测一些数据类型,列名等
create table vehicle_classifications (
vehicle_id integer not null references vehicles (vehicle_id),
classification_id integer not null references classifications (classification_id),
primary key (vehicle_id, classification_id)
);
然后像
insert into vehicle_classifications (vehicle_id, classification_id)
select t1.vehicle_id, t2.classification_id
from vehicles t1
inner join classifications t2 on t1.classification = t2.classification
然后,在检查数据后,我会手动删除分类 车辆表中的列。
在执行此操作之前,请确保在新连接表上有外键约束。