在MySQL中一次更新多行

时间:2018-05-16 08:01:46

标签: mysql database

我有一个值向量

vector = [10,11,10,11,12];

和初始化的数据库表

enter image description here

我的目标是使用向量中的值更新每一行的值(初始化为-1)。因此id = 1,将具有值10,id = 2,值11等。

我可以在循环中执行此操作,即对于向量中的每个值更新相应的行。

但是我想知道我是否可以使用一个更新语句来执行此操作。我正在使用MySQL。

更新后的最终状态应为:

enter image description here

数据库中的第N行(已排序)应具有向量的第N个值。

3 个答案:

答案 0 :(得分:3)

我建议你将你的矢量转换成表格:

CREATE TEMPORARY TABLE Vectors(
ID int NOT NULL AUTO_INCREMENT,
Value int not null)

INSERT INTO Vectors VALUES(10),(11),(10) ...

UPDATE MyTable AS T 
INNER JOIN Vectors AS V ON V.ID=T.ID 
SET T.Value = V.Value 
WHERE T.Value = -1

DROP TEMPORARY TABLE Vectors

答案 1 :(得分:2)

您可以执行以下操作(据我所知,使用更新语句无法执行此操作):

INSERT INTO table (id,value) VALUES (1,10),(2,11),(3,10),(4,11),(5,12)
ON DUPLICATE KEY UPDATE value=VALUES(value)

它的作用是检查密钥是否已经存在的insert语句,如果是,它将更新该行。

答案 2 :(得分:2)

试试这个:我认为我们可以通过UNION ALL在一个查询中实现这一目标

UPDATE test t
INNER JOIN (
            SELECT 1 id, 10 val UNION ALL
            SELECT 2 id, 11 val UNION ALL
            SELECT 3 id, 10 val UNION ALL
            SELECT 4 id, 11 val UNION ALL
            SELECT 5 id, 12 val) vector ON vector.id = t.id
SET t.val = vector.val           
WHERE t.val = -1;