如果我有一张 table my_table
像这样:
| id | val1 | val2|
| 1 | foo1 | bar |
| 2 | foo2 | baz |
| 3 | foo3 | bam |
我有一个以编程方式生成的硬编码逗号分隔值列表:
spam, eggs, ham
.我想将我的值插入列
val1
.我在想象这样的事情:UPDATE my_table SET val1 = SELECT * FROM (VALUES ('spam'),('eggs'),('ham'))
但这给了我一个语法错误(MySQL 5.6.44)
最终结果应如下所示:
| id | val1 | val2|
| 1 | spam | bar |
| 2 | eggs | baz |
| 3 | ham | bam |
最佳答案
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,val1 VARCHAR(12) NOT NULL
,val2 VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
(1,'foo1','bar'),
(2,'foo2','baz'),
(3,'foo3','bam');
UPDATE my_table SET val1 = SUBSTRING_INDEX(SUBSTRING_INDEX('spam,eggs,ham',',',id),',',-1);
SELECT * FROM my_table;
+----+------+------+
| id | val1 | val2 |
+----+------+------+
| 1 | spam | bar |
| 2 | eggs | baz |
| 3 | ham | bam |
+----+------+------+
关于mysql - 每行具有不同值的 UPDATE SET 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58014002/