【问题标题】:SQL update query on join table连接表上的 SQL 更新查询
【发布时间】:2020-03-30 08:20:31
【问题描述】:
UPDATE 
    t1
SET 
    t1.c3 = t2.c3,
    t1.c4 = t1.c4 
FROM 
    t1
    LEFT JOIN t2 ON t1.c1 = t2.c1 AND t1.c2 = t2.c2
WHERE 
    t1.c5 = 'In Progrss'

我想从表 t2 的第一行更新值。

例如,在 t2 表中,有 3 行的条件匹配仅高于顶行值update in t1 table(ROW ID 3 VALUES TO UPDATE IN t1 table)

t2 表:

id  c1      c2     c3     c4
-----------------------------
1   ABC     XYZ    280    300
2   ABC     XYZ    290    400
3   ABC     XYZ    310    500
4   PQR     STR    210    400

t1 表:

id  c1      c2     c3     c4   c5
----------------------------------
1   ABC     XYZ                In Progrss
5   ABC     XYZ                In Progrss
8   ABC     XYZ                In Progrss
15  PQR     STR                IN Progress

【问题讨论】:

标签: sql join sql-update


【解决方案1】:

Postgres 的更新/加入语法如下:

update t1
set c3 = t2.c3, c4 = t1.c4
from t2
where 
    t1.c1 = t2.c1 
    and t1.c2 = t2.c2
    and t1.c5 = 'In Progress'

如果t2 中有多个匹配行,而您想要id 最小的行,则可以在子查询中使用row_number()

update t1
set c3 = t2.c3, c4 = t1.c4
from (select t2.*, row_number() over(partition by c1, c2 order by id) rn from t2) t2
where 
    t1.c1 = t2.c1 
    and t1.c2 = t2.c2
    and t1.c5 = 'In Progress'
    and t2.rn = 1

【讨论】:

  • 感谢快速回复,您的查询将在 t1 所有行中更新 310、500?
  • 有解决办法吗?
  • @Bhushan:我用另一个选择第一个匹配行的查询更新了我的答案。我将为t1 中的所有三行更新 280、300。
  • @Bhushan:你真的在使用 Postgres 吗?我以为我在您的问题中看到了该信息,但现在我没有。
  • 我想要最高的行 ID,但我不知道实际场景中的行 ID,更新原始帖子中的表格
猜你喜欢
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2011-12-24
  • 2023-01-18
相关资源
最近更新 更多