【问题标题】:UPDATE from join not returning expected results?从加入更新不返回预期结果?
【发布时间】:2022-01-18 23:53:10
【问题描述】:

我正在创建一个基于另一个产品表更新一个产品表的 postgresql 脚本。 第一个表,我们将调用 T1 包含产品代码和一些描述性信息。产品代码是此表的键:

product_code values
abc123 34
abd124 42

第二张表包含产品,以及显示这些产品可用性的日期。

product_code begin_date end_date
abc123 1/1/2020 2/3/2021
abd124 12/1/2019 12/31/2021
xyz345 03/01/2019 NULL

然后我使用 ALTER TABLE 将 begin 和 end_date 列添加到第一个表。 然后我使用了更新语句:

UPDATE T1
SET
begin_date =  b.begin_date,
end_date = b.end_date
FROM T2 b JOIN T1 a ON a.product_code = b.product_code;

这给出了不正确的结果。对我来说,似乎填充了一对值,而不是 T2 中的正确值。

product_code values begin end
abc123 34 03/01/2019 NULL
abd124 42 03/01/2019 NULL

我真的不知道是什么原因造成的。我知道插入的值来自 T2 中的某个地方。但是,我看不出所有这些值都应该相同的任何合乎逻辑的原因。

【问题讨论】:

  • 为什么要将相同的日期存储在两个不同的地方?你打算放弃 t2 表吗?
  • 我想删除/标记非活动的任何过去有结束日期的东西。我们还会收到这些表格的季度更新,所以如果日期发生变化,我想更新一下。

标签: sql postgresql


【解决方案1】:

您不需要在 FROM 子句中加入表 T1。你可以试试这个:

UPDATE T1 AS a
SET
begin_date =  b.begin_date,
end_date = b.end_date
FROM T2 AS b
WHERE b.product_code = a.product_code;

【讨论】:

  • 谢谢,这很有道理!这更简单,并且给了我正确的值
猜你喜欢
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多