我正在寻找一些关于从另一个表更新空字段的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中空白的任何用户。
答案 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;
我在这里做了一些假设:
user_table.id
是主键,如果它不使用真正的PK或使用user_table.email
作为连接条件。 “u1 ON (u.email = u1.email)
”spare_mobile_numbers
。请注意,MySQL不允许您更新表,同时在子选择中从该表中进行选择。扼杀它确实允许你在子子选择中使用相同的表,这就是我在这里所做的。