Sql 根据另一列中的外键更新新添加的列
在修改已填充数据的表后,如何根据以前存在的外键ID使用值更新新列 例如: 假设我有一个表CarSales,其中我按单个汽车或汽车类型对销售数量进行分组:Sql 根据另一列中的外键更新新添加的列,sql,sql-server,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 |
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>
...
然后,我决定还需要根据活塞运动对销售数量进行分组,因此我在汽车销售中添加了一个新列PistonMotion:
CarID | Color | PistonMotion
1 | 'Blue' | V
2 | 'Gray' | V
3 | 'Pink' | Linear
4 | 'Blue' | Linear
...
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>
...
ID | CarID | CarType | PistonMotion | Quantity | SaleDate
1 | 1 |空|空| 2 |
2 | 2 |空|空| 3 |
3 | 2 |空|空| 1 |
4 |空|卡车|空| 12 |
...
现在,CarSales已经充满了数据(假设我有数千行),但是我需要根据同一行上的CarID作为一次性操作更新表中每一行的PistonMotion。由于我想将CarSales表中的CarID和CarType以及PistonMotion一起分组,因此我不想在将来简单地对Cars表执行联接查询。我知道我将无法在CarID为空的行上更新PistonMotion,但这并不重要,因为这些不是我的实际表,因此请忽略这一点
问题很简单:我需要什么查询来更新汽车销售中的PistonMotion,以便它等于汽车中的PistonMotion,其中共享相同的CarID。您需要一个具有内部联接的更新:
UPDATE CS
Set PistonMotion = C.PistonMotion
from CarSales CS inner join Cars C on C.CarID=CS.CarID
如果
汽车
中已有此列,为什么要将其添加到汽车销售
中?正如我前面提到的,这些不是我的真实表格,我只是做了一个非常简单的示例。实际情况要复杂得多,我不想讨论为什么我需要这样做。这是一个简单的连接到更新。你可以在下面的答案中看到。但是,无论简化与否,这都是一个糟糕的设计理念。那以后的争吵呢?您需要在两个表中插入相同的数据。如果PistonMotion
在汽车中发生变化怎么办?更新很简单,需要时从其他表中获取所需数据也很简单。因为有时CarSales
表中没有CarID
,但您仍然需要能够根据CarType
和PistonMotion
进行分组。然而,我意识到我应该将PistonMotion
保留为NULL
,其中有CarID
值。