我可以用纯 SQL 做到这一点吗?
Posted
技术标签:
【中文标题】我可以用纯 SQL 做到这一点吗?【英文标题】:can I do this with pure SQL? 【发布时间】:2012-03-30 06:48:30 【问题描述】:假设我有一张这样的桌子:
name |order_id
=======================
first_record | 0
second_record | 0
third_record | 0
[...]
我只想用一个递增的值更新order_id
(不知道如何正确地用英文表示 - 请随时使用更好的描述进行编辑)。请参阅下面的预期输出:
name |order_id
=======================
first_record | 1
second_record | 2
third_record | 3
[...] | n
我知道如何通过使用某种编程语言中的脚本或 sql 过程来做到这一点,这两种解决方案都涉及循环整个表。
【问题讨论】:
哪个name列有哪个order_id有关系吗? 除了直接oracle的rownum还有其他要求吗? @safarov 名字无关紧要 @cctan 就像 rownum,但我想更新现有的记录集。 【参考方案1】:你可以更新表格:
SET @oo = 0;
UPDATE table SET `order_id`=@oo:=@oo+1 ORDER By something;
或者只是在选择时获取 order_id 作为返回的行号:
SET @oo = 0;
SELECT name, @oo:=@oo+1 order_id FROM table ORDER By something;
【讨论】:
这就是我想要的。它适用于 mysql,现在我需要弄清楚 hsqldb 的语法:)【参考方案2】:你的意思是这样的吗?这个问题不是很清楚。
DECLARE @order_id int
SET @order_id = 0
UPDATE #tmp_Users
SET @order_id = order_id = @order_id + 1
【讨论】:
以上是关于我可以用纯 SQL 做到这一点吗?的主要内容,如果未能解决你的问题,请参考以下文章
CSS 挑战,我可以在不引入更多 HTML 的情况下做到这一点吗? [复制]
CSS 挑战,我可以在不引入更多 HTML 的情况下做到这一点吗? [复制]