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

时间:2015-01-21 17:56:26

标签: mysql set

我无法弄清楚执行以下操作的正确方法:

1。)我有一个全名列 2.)我需要将fullname列拆分为first&姓氏块 3.)我需要插入'分裂'数据到各自的列(当前为空且在同一个表中)

我无法弄清楚如何在一个查询中执行此操作,因此我将其分解为步骤:

1。)获得了我的分割数据(第一个/最后一个字符串)

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..

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

所以我接着尝试了这个:

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

但收到了错误..

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便使用接近'(名字,姓氏)值的正确语法(" xxxx"," xxx")....

所以在这一点上,我的问题是双重的。

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

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

更新

这最终对我有用:

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

1 个答案:

答案 0 :(得分:1)

假设您的表名是 paypalRegistration 此表 paypalRegistration 包含以下列:

  1. id INT PRIMARY KEY
  2. fullName VARCHAR
  3. firstName VARCHAR
  4. lastName VARCHAR
  5. 我希望您的表 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;