Mysql 更新两个表字段,每个字段使用另一个值
也许有人能帮我 我有一个MYSQL表,有名字和姓氏。 有些行在“名字”列中添加了姓氏,在“姓氏”列中添加了姓氏 我怎么能把这些翻过来。我尝试了一个简单的更新Mysql 更新两个表字段,每个字段使用另一个值,mysql,sql,string,join,sql-update,Mysql,Sql,String,Join,Sql Update,也许有人能帮我 我有一个MYSQL表,有名字和姓氏。 有些行在“名字”列中添加了姓氏,在“姓氏”列中添加了姓氏 我怎么能把这些翻过来。我尝试了一个简单的更新SET firstname=lastname,lastname=firstname,但没有成功 任何帮助都会很好。基本上,您不能在MySQL中的一个简单的update语句中实现这一点,因为set子句中的连续赋值不是独立的。这不起作用: update mytable set first_name = last_name, last_name =
SET firstname=lastname,lastname=firstname
,但没有成功
任何帮助都会很好。基本上,您不能在MySQL中的一个简单的
update
语句中实现这一点,因为set
子句中的连续赋值不是独立的。这不起作用:
update mytable set first_name = last_name, last_name = first_name
执行第二个赋值时,first\u name
已设置为last\u name
。这样做会将两列都设置为last\u name
这不是标准的SQL,但MySQL就是这样做的。一个选项使用自联接。假设表的主键是id
:
update mytable t
inner join mytable t1 on t1.id = t.id
set t.first_name = t1.last_name, t.last_name = t1.first_name
mysql> select * from mytable;
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Potter | Harry |
+-----------+----------+
mysql> update mytable
set lastname = (@temp := lastname), -- no-op, but sets a variable as a side effect
lastname = firstname,
firstname = @temp;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from mytable;
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Harry | Potter |
+-----------+----------+