如何使用一条SQL语句更新多个行,每个行的状态不同

如何使用一条SQL语句更新多个行,每个行的状态不同,sql,mysql,Sql,Mysql,假设我有这个两列的表格 id | column_test 1 | NULL 2 | NULL 3 | NULL 如您所见,列\u test列现在都有值“NULL”。现在我想对该表进行更新,最终状态如下: id | column_test 1 | a 2 | b 3 | c 我对复合SQL语句知之甚少,看起来要使用的查询是一个小型SQL程序,可能会涉及局部变量。不幸的是,我还不知道确切的语法(在过去的20-30分钟里,我自己也尝试过

假设我有这个两列的表格

 id  | column_test

 1   | NULL

 2   | NULL

 3   | NULL 

如您所见,列\u test列现在都有值“NULL”。现在我想对该表进行更新,最终状态如下:

 id  | column_test

 1   | a

 2   | b

 3   | c

我对复合SQL语句知之甚少,看起来要使用的查询是一个小型SQL程序,可能会涉及局部变量。不幸的是,我还不知道确切的语法(在过去的20-30分钟里,我自己也尝试过构建查询),也许我可以在这里找到一些SQL专家来帮助我

[编辑:让我们继续使用mysql。]

mysql
中:

CREATE TABLE mytable (id INT NOT NULL, column_test CHAR(1));

INSERT
INTO    mytable (id)
VALUES
(1),
(2),
(3),
(4);

SET @r := 0;
UPDATE  mytable
SET     column_test = CHAR(96 + (@r := @r + 1))
WHERE   column_test IS NULL
ORDER BY
        id;

SELECT  *
FROM    mytable;
在SQL Server的

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    mytable
        WHERE   column_test IS NULL
        )
UPDATE  q
SET     column_test = CHAR(96 + rn)

通常,可以将该列设置为其他一些列的函数结果,从而将不同的行设置为不同的值。一个例子:

UPDATE mytable
SET column_test = cola+colb/colc
更接近你的问题,这应该有效

UPDATE mytable
SET column_test = Char (ASCII('a') + id-1)

当然,这只适用于表中数量有限的行。

要用于更新的值来自何处,或者它们实际上是a代表1,b代表2?请添加一些关于要使用的RDBMS/数据库的信息。@astander:它只是“a”然后“b”然后“c”@IronGoofy:我使用的是mysql,难道这不是一个一般的SQL问题吗?
@Shawn
:不,
SQL
语法不可移植。您有多少行?当您到达“z”时,在~25之后该怎么办?因为id可能不是连续的。尝试MySQL查询时,它会将列值设置为空(非空)。不正确的字符串值:'\C7'用于第1行的“column_test”不正确的字符串值:'\C8'用于第2行的“column_test”不正确的字符串值:'\C9'用于第3行的“column_test”不正确的字符串值:'\CA'用于第4行的“column_test”,对不起,这与我的字符集UTF-8有关。
C7
199
这远远超出了字母范围
(97-122)
。这意味着您至少有
104个
项目。似乎假装有超过25条以上的记录对你没有帮助,你需要定义在
Z
之后要做什么。或者你忘记重置
@r
。在发出查询之前,您是否发出
SET@r:=0