sql - 如何将字段从一个表移动到另一个表并保存数据
问题描述
我有两张表,一张是关于销售的,另一张表包含关于车辆的信息:
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:
解决方案
考虑使用外键关系将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
推荐阅读
- database - 我可以使用 PostgreSQL 的继承在一个数据库的许多表中获取一组特定的列吗?
- angular7 - 如何在升级到角度 7、rxjs6 时修复“'WheelEvent' 类型上不存在属性 'wheelDelta'”?
- php - 如何使用 PHP 将文本添加到现有 PDF 中?
- c++ - 使用 __fastfail 优于原生函数(kill、ExitProcess 等)的优势?
- wpf - ItemsControl 中的子控件被禁用,但我不知道是什么禁用了它们
- kendo-ui - 如何从剑道条形图/柱形图中删除水平网格线?
- image-processing - 在 Keras 图像分类中不会减少的损失验证
- sql - 如何在 SQL 中合并数据
- sql - SQL 连接查询具有跨 3 个表的列总和的视图
- git-bash - Git Bash - 开始时带有“/”的字符串参数正在扩展为文件路径。如何阻止这种情况?