mysql之每行具有不同值的 UPDATE SET 列

zengkefu 阅读:75 2024-02-27 23:08:18 评论:0

如果我有一张 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
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号