从MYSQL中的另一个表更新空字段

时间:2011-09-26 17:34:25

标签: mysql field

我正在寻找一些关于从另一个表更新空字段的MYSQL帮助。

我想将一个Spare_Mobile_Numbers表中的数字分配给user_table.MobileNumber中空白的任何用户。

我有一个用户数据表:

User_table (table)
----------------------------------------------
Name    Email               MobileNumber
Rob     rob@email.com       <blank>
Jane    jane@email.com      07700000001
Penny   Jenny@email.com     07700000002
John    John@email.com      <blank>
Gavin   Gavin@email.com     07700000003

Spare_Mobile_Numbers (table)
----------------------------------------------
07700000004
07700000005
07700000006
07700000007

我想将一个Spare_Mobile_Numbers表中的数字分配给user_table.MobileNumber中空白的任何用户。

1 个答案:

答案 0 :(得分:1)

您必须在交易中执行此操作,因为在分配备用号码后,您需要将其从可用列表中删除。

确保使用像InnoDB这样的事务引擎。

并做:

START TRANSACTION;
  UPDATE user_table u
  INNER JOIN (SELECT * FROM (SELECT id, @urank:= @urank + 1 as rank 
              FROM user_table u3
              CROSS JOIN (select @urank:= 1) q
              WHERE u3.MobileNumber IS NULL) u2) u1 ON (u.id = u1.id)
  INNER JOIN (SELECT @smrank:= @smrank +1 as rank, sparenumber 
              FROM spare_mobile_numbers
              CROSS JOIN (select @smrank:= 1) q2) sm ON (u1.rank = sm.rank)
  SET u.MobileNumber = sm.sparenumber;

  DELETE sm FROM spare_mobile_numbers sm 
  INNER JOIN user_table u ON (sm.sparenumber = u.MobileNumber);
COMMIT;

我在这里做了一些假设:

  1. user_table.id是主键,如果它不使用真正的PK或使用user_table.email作为连接条件。 “u1 ON (u.email = u1.email)
  2. sparenumber是spare_mobile_numbers
  3. 中列出的字段的名称

    请注意,MySQL不允许您更新表,同时在子选择中从该表中进行选择。扼杀它确实允许你在子子选择中使用相同的表,这就是我在这里所做的。