Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新两个表字段,每个字段使用另一个值_Mysql_Sql_String_Join_Sql Update - Fatal编程技术网

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 =

也许有人能帮我

我有一个MYSQL表,有名字和姓氏。 有些行在“名字”列中添加了姓氏,在“姓氏”列中添加了姓氏

我怎么能把这些翻过来。我尝试了一个简单的更新
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   |
+-----------+----------+