首页 > 解决方案 > 如何将字段从一个表移动到另一个表并保存数据

问题描述

我有两张表,一张是关于销售的,另一张表包含关于车辆的信息:

CREATE TABLE vehicle
(
    id                    SERIAL PRIMARY KEY,
    specs_id              INT REFERENCES specs (id) ON DELETE RESTRICT,
    model                 INT REFERENCES model (id) ON DELETE RESTRICT,
    delivery_date         DATE,
    color                 VARCHAR(20),
    plant_id              SERIAL REFERENCES plant (id) ON DELETE RESTRICT,
    date_of_manufacturing DATE
);

CREATE TABLE selling
(
    vehicle      INT REFERENCES vehicle (id) ON DELETE RESTRICT,
    client_id    INT REFERENCES client (id) ON DELETE RESTRICT,
    VIN          CHAR(17) PRIMARY KEY NOT NULL,**
    selling_date DATE,
    subtotal     INTEGER,
    payment      PAYMENT_TYPE,
    seller_id    INT REFERENCES manager (id) ON DELETE RESTRICT
);

我需要将字段VIN销售转移到车辆,并且我需要现有车辆与他们的 VIN 相对应。这是表格:要修改的表格

我试过这段代码:

ALTER TABLE vehicle
ADD COLUMN VIN CHAR(17);
UPDATE vehicle VIN
SET VIN = selling.VIN
FROM selling

但结果是错误的:所有车辆都从销售中获得一个 VIN:

修改后的VEHICLE表

标签: sqldatabasepostgresqljoinsql-update

解决方案


考虑使用外键关系将in 中的每一行与 invehicle中的相应行相关联:selling

UPDATE vehicle
SET vin = s.vin
FROM selling s
WHERE s.vehicle = vehicle.id

由于这看起来像一个 1-N 关系,我实际上建议:

UPDATE vehicle
SET vin = s.vin
FROM (SELECT DISTINCT vehicle, vin FROM selling) s
WHERE s.vehicle = vehicle.id

推荐阅读