也许有人可以帮助我。
我有一个包含名字和姓氏的 MYSQL 表。一些行在名字列中添加了姓氏,在姓氏列中添加了名字。
我怎么能翻转这些。我尝试了一个简单的更新SET firstname = lastname, lastname = firstname
,但这不起作用。
任何帮助都会很棒。
也许有人可以帮助我。
我有一个包含名字和姓氏的 MYSQL 表。一些行在名字列中添加了姓氏,在姓氏列中添加了名字。
我怎么能翻转这些。我尝试了一个简单的更新SET firstname = lastname, lastname = firstname
,但这不起作用。
任何帮助都会很棒。
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 |
+-----------+----------+
基本上你不能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