根据另一列中的外键更新新添加的列

时间:2013-08-08 13:51:49

标签: sql sql-server

如何在更改已填充数据的表后,根据以前存在的外键ID更新新列的值。

示例:

假设我有 CarSales 表格,我可以按单个车辆或按车型分组销售数量:

ID | CarID | CarType  | Quantity | SaleDate
1  | 1     | NULL     | 2        | <some date>
2  | 2     | NULL     | 3        | <some date>
3  | 2     | NULL     | 1        | <some date>
4  | NULL  | 'Trucks' | 12       | <some date>
...

CarID 是连接到表汽车的外键:

CarID | Color  | PistonMotion
1     | 'Blue' | V
2     | 'Gray' | V
3     | 'Pink' | Linear
4     | 'Blue' | Linear
...

然后我决定我还需要按活塞运动对销售数量进行分组,因此我将 PistonMotion 添加到 CarSales

ID | CarID | CarType  | PistonMotion | Quantity | SaleDate
1  | 1     | NULL     | NULL         | 2        | <some date>
2  | 2     | NULL     | NULL         | 3        | <some date>
3  | 2     | NULL     | NULL         | 1        | <some date>
4  | NULL  | 'Trucks' | NULL         | 12       | <some date>
...

现在, CarSales 已经充满了数据(假设我有数千行),但我需要根据<更新 PistonMotion 表中的每一行strong> CarID 与一次性操作位于同一行。由于我想将 CarID CarType 以及 CarSales 表中的 PistonMotion 分组,我不想以后只需对汽车表进行JOIN查询。我知道我无法在 CarID 为NULL的行上更新 PistonMotion ,但这没关系,因为这些不是我的实际表,所以请忽略从那起。

问题很简单:我需要哪些查询才能更新 CarSales 中的 PistonMotion ,以便它等于 PistonMotion strong>汽车哪里共享 CarID

1 个答案:

答案 0 :(得分:2)

您需要使用内部联接进行更新:

UPDATE CS
Set PistonMotion = C.PistonMotion
from CarSales CS inner join Cars C on C.CarID=CS.CarID