如何在更改已填充数据的表后,根据以前存在的外键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 ?
答案 0 :(得分:2)
您需要使用内部联接进行更新:
UPDATE CS
Set PistonMotion = C.PistonMotion
from CarSales CS inner join Cars C on C.CarID=CS.CarID