Как переместить поле из одной таблицы в другую таблицу и сохранить данные - PullRequest
1 голос
/ 25 апреля 2020

У меня есть две таблицы, одна о продаже, а другая таблица содержит информацию о транспортном средстве:

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 из продажи:

ТРАНСПОРТНЫЕ СРЕДСТВА после модификации

1 Ответ

1 голос
/ 25 апреля 2020

Рассмотрим корреляцию каждой строки в vehicle с соответствующей строкой в ​​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
...