0

在更改已填充数据的表后,如何根据先前存在的外键 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是连接到表Cars的外键:

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

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

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已经充满了数据(假设我有数千行),但我需要根据同一行上的 CarID 为表中的每一行更新PistonMotion作为一次性操作。由于我想在CarSales表中将CarIDCarTypePistonMotion组合在一起,因此我不想在将来简单地对Cars表进行 JOIN 查询。我知道我将无法在CarID为 NULL的行上更新PistonMotion,但这没关系,因为这些不是我的实际表,所以请忽略这一点。

问题很简单:我需要什么查询才能更新CarSales中的PistonMotion,使其与共享相同CarID汽车中的PistonMotion相等?

4

1 回答 1

2

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

UPDATE CS
Set PistonMotion = C.PistonMotion
from CarSales CS inner join Cars C on C.CarID=CS.CarID
于 2013-08-08T13:58:28.423 回答