【问题标题】:SQL Update with row_number() plus concat使用 row_number() 和 concat 进行 SQL 更新
【发布时间】:2022-01-16 19:34:22
【问题描述】:

我根据另一个列的值添加了一个新列。我想用正确的值加上一个按元素分组的增量数字来更新那个新的列。 例如:

city new_colum
Madrid Madrid
Madrid Madrid-2
Madrid Madrid-3
Sevilla Sevilla
Sevilla Sevilla-2
Sevilla Sevilla-3
Sevilla Sevilla-4
Alicante Alicante

我尝试了以下代码,但总是遇到语法错误。

UPDATE cities as c
SET c.new_colum = concat(t.city,'-', t.col) 
FROM (SELECT ROW_NUMBER() OVER(partition by city) AS col, city_st FROM cities) t;   

【问题讨论】:

  • 可能会使用 CTE,然后从中更新?
  • 您的数据库是什么(例如 MySQL、SQL Server 等)? SQL 只是一种语言,而不是实际产品。
  • 请说明 DBMS,以便我们可以准确地告诉您如何实现您的目标。但对于初学者来说,您不能在更新期间创建新列。您只能更新现有列。
  • 我的数据库是mysql。
  • 我尝试使用 cte 但不工作 @huMptyduMpty: 使用 cte (col) as (SELECT ROW_NUMBER() OVER(partition by city ORDER BY city) AS col FROM cities) 将城市更新为 c 设置 c .new_colum = concat(c.new_column,'-', cte.col) ;

标签: mysql sql sql-update row-number


【解决方案1】:

假设您已将“newcolumn”添加到城市,并且城市中有一个名为“id”的主键:

UPDATE cities c
JOIN
(SELECT id,
ROW_NUMBER() OVER(partition by city ) newcolumn
FROM cities) t on c.id=t.id
SET c.newcolumn = CONCAT(city,'-',t.newcolumn)
;

db 小提琴:

https://www.db-fiddle.com/f/dTnf3bNaXhEKKDzZzSED9K/0

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2021-12-14
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多