gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:43:13 25 4
gpt4 key购买 nike

我正在寻找一些有关更新另一个表中的空字段的 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 中为空白的任何用户。

最佳答案

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

确保您使用像 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 中列出的字段名称。

请注意,MySQL 不允许您在更新表的同时在子查询中从该表中进行选择。奇怪的是,它确实允许您在子子选择中使用同一个表,这就是我在这里所做的。

关于mysql - 更新 MYSQL 中另一个表的空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com