更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:
|primary_key |value| | 1 | xyz| | 2 | abc| | 3 | def| ...
目标表中已存在具有这些主键的行
我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:
update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
首先是样本数据
mysql> drop table if exists mytable; Query OK, 0 rows affected (0.03 sec) mysql> create table mytable -> ( -> id int not null, -> value VARCHAR(255), -> primary key (id) -> ); Query OK, 0 rows affected (0.06 sec) mysql> insert into mytable (id) values (1),(2),(3); Query OK, 3 rows affected (0.06 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from mytable; +----+-------+ | id | value | +----+-------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | +----+-------+ 3 rows in set (0.00 sec) mysql>
这是新的查询
update mytable A inner join ( SELECT 1 id,'xyz' value UNION SELECT 2 ,'abc' UNION SELECT 3 ,'def' ) B USING (id) SET A.value = B.value;
这是执行的新查询
mysql> update mytable A inner join -> ( -> SELECT 1 id,'xyz' value UNION -> SELECT 2 ,'abc' UNION -> SELECT 3 ,'def' -> ) B USING (id) -> SET A.value = B.value; Query OK, 0 rows affected (0.06 sec) Rows matched: 3 Changed: 0 Warnings: 0 mysql> select * from mytable; +----+-------+ | id | value | +----+-------+ | 1 | xyz | | 2 | abc | | 3 | def | +----+-------+ 3 rows in set (0.00 sec) mysql>