如何使用递增的值更新表中的所有记录?

时间:2017-03-28 06:38:38

标签: mysql sql

我有一张桌子" House":

id | name | order
1  | riw  | 0
2  | hnm  | 0
4  | vse  | 0
5  | tes  | 0

我想简单地接受:

id | name | order
1  | riw  | 0
2  | hnm  | 1
4  | vse  | 2
5  | tes  | 3

所以我试过了:

UPDATE house SET position = position + 1

但是如何增加这个值呢?

5 个答案:

答案 0 :(得分:8)

使用id列进行更新:

UPDATE house SET order = id - 1

如果您认为id可以从1以外的n值开始,请尝试:

SET @position:=0;
update house
set order=@position:=@position+1

答案 1 :(得分:2)

在Oracle中,您可以使用 ROWNUM

在我的SQL中:可以使用等级。您还可以使用自动递增的标识列创建临时表。然后从主表中插入临时表。最后截断主表并从临时表中插回。

另外,您可以查看以下查询,您可以根据自己的需要进行修改。

SET @row_number = 0;

SELECT 
    (@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
    employees
LIMIT 5;

enter image description here

答案 2 :(得分:1)

这样做

update house as hs 
inner join 
 (select id, (@row:=@row+1) as o from house h, (select @row:=0) as r) as hsjoin 
 on hsjoin.id = hs.id
set hs.order = hsjoin.o;

基本上使用变量并递增它,加入表并更新顺序

答案 3 :(得分:1)

在MS SQL中,使用函数Row_Number()创建一个临时表,然后更新与临时表连接的表

目前我不确定语法是否完全正确但我决定回答更多因为我想到的方法

示例:

SELECT ROW_NUMBER() OVER(ORDER BY id asc) AS RowNr,
       id, name
INTO #tmp
FROM house

UPDATE  house
SET     h.position = t.RowNr - 1
FROM    house h
JOIN    tmp   t ON h.id = t.id

答案 4 :(得分:-2)

只需转到表格并使订单栏自动增加