1

也许有人可以帮助我。

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

我怎么能翻转这些。我尝试了一个简单的更新SET firstname = lastname, lastname = firstname,但这不起作用。

任何帮助都会很棒。

4

2 回答 2

1
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   |
+-----------+----------+
于 2020-09-10T23:15:13.087 回答
0

基本上你不能update 在 MySQL 的简单语句中做到这一点,因为子句中的连续赋值set不是独立的。这不起作用:

update mytable set first_name = last_name, last_name = first_name

当执行第二个赋值时,first_name设置为last_name已经。因此,这样做会将两列都设置为last_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
于 2020-09-10T23:13:29.983 回答