如何使用一条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
?