我有一个值向量
vector = [10,11,10,11,12];
和初始化的数据库表
我的目标是使用向量中的值更新每一行的值(初始化为-1)。因此id = 1,将具有值10,id = 2,值11等。
我可以在循环中执行此操作,即对于向量中的每个值更新相应的行。
但是我想知道我是否可以使用一个更新语句来执行此操作。我正在使用MySQL。
更新后的最终状态应为:
数据库中的第N行(已排序)应具有向量的第N个值。
答案 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;