Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据另一列中的外键更新新添加的列_Sql_Sql Server - Fatal编程技术网

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

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使用值更新新列

例如:

假设我有一个表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>
...
然后,我决定还需要根据活塞运动对销售数量进行分组,因此我在汽车销售中添加了一个新列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表中的CarIDCarType以及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
值。