使用 VALUES() 数组更新所有行中的 2 列

UPDATE 2 columns in all rows using VALUES() array

我不太明白执行以下操作的正确方法:

1.) 我有一个全名列 2.) 我需要将该全名列拆分为名字和姓氏块 3.) 我需要将 'split' 数据插入到它们各自的列中(它们目前是空的并且在同一个 table)

我不知道如何在一个查询中完成,所以我将其分解为几个步骤:

1.) 得到了我的拆分数据(first/last 个字符串)

SELECT fullname, SUBSTRING_INDEX(fullname,' ',1) AS fname, SUBSTRING_INDEX(SUBSTRING_INDEX(fullname,'.',2),' ',-1) AS lname FROM tablename;

这给了我的 fname 和 lname 子字符串..

我试错了:

INSERT INTO paypalRegistration (firstname, lastname) VALUES
("xxxx", "xxx"),
("yyy", "yyy"),
("zzz", "zzz"),...etc..

这只是将内容插入新行..(并且没有更新 table 中已经存在的当前行 [带有空白列])

所以我尝试了这个:

UPDATE paypalRegistration SET(firstname, lastname) VALUES ("xxxx", "xxx"),
("yyy", "yyy"), ("zzz", "zzz"),...etc..

但是出错了..

您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '(firstname, lastname) VALUES ("xxxx", "xxx").....[=14= 附近使用的正确语法]

所以在这一点上,我的问题有两个。

1.) 如何在 1 个查询中执行此操作?

2.) 在我所处的位置,使用我上面的唯一值更新 2+ 列的正确方法是什么?

更新:

这最终对我有用:

UPDATE myTable SET firstname=SUBSTRING_INDEX(fullname,' ',1), lastname=SUBSTRING_INDEX(SUBSTRING_INDEX(fullname,'.',2),' ',-1);

说你的 table 名字是 paypalRegistration 此 table paypalRegistration 有以下列:

  1. id INT 主键
  2. 全名 VARCHAR
  3. 名字 VARCHAR
  4. 姓氏 VARCHAR

我希望您的 table paypalRegistration 中已有 id 列,如上文所述。 现在,您可以这样做 SQL:

UPDATE paypalRegistration x 
INNER JOIN (
  SELECT 
    id,
    SUBSTRING_INDEX(fullName,' ',1) AS fname,
    SUBSTRING_INDEX(SUBSTRING_INDEX(fullName,'.',2),' ',-1) AS lname
  FROM paypalRegistration
) y ON y.id=x.id 
SET x.firstName = y.fname, x.lastName = y.lname;