【问题标题】:Update newly added column according to foreign key in another column根据另一列中的外键更新新添加的列
【发布时间】:2013-08-08 13:51:49
【问题描述】:

如何在更改已填充数据的表后,根据先前存在的外键 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 已经充满了数据(假设我有数千行),但我需要根据 PistonMotion 为表中的每一行更新 PistonMotion strong>CarID 与一次性操作位于同一行。因为我想在 CarSales 表中将 CarIDCarTypePistonMotion 一起分组,所以我不想将来只需对 Cars 表执行 JOIN 查询。我知道我将无法在 CarID 为 NULL 的行上更新 PistonMotion,但这没关系,因为这些不是我的实际表格,所以请忽略从此。

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

【问题讨论】:

  • 如果Cars 已经提供此列,为什么还要将此列添加到CarSales
  • 就像我已经提到的,这些不是我的真实表格,我只是做了一个非常简化的例子。实际情况要复杂得多,我不想详细说明为什么需要这样做。
  • 加入更新很简单。您可以在下面的答案中看到。但是,无论是否简化,这都是糟糕的设计理念。未来的行呢?您将需要在两个表中插入相同的数据。如果PistonMotion 更改为Cars 怎么办?更新很简单,在需要时从其他表中获取所需数据也很简单。
  • 因为有时CarSales 表中没有CarID,但您仍然需要能够同时按CarTypePistonMotion 进行分组。但是我意识到我应该将PistonMotion 保留为NULL,其中有CarID 值。

标签: sql sql-server


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多