我有一张桌子" 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
但是如何增加这个值呢?
答案 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;
答案 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)
只需转到表格并使订单栏自动增加