我需要执行以下从 user_table_a 到 user_table_b 的更新。它似乎比我更难,所以我想我遗漏了一些关于语法的东西。这些是表结构:
CREATE TABLE user_table_a (
id INT(11) NOT NULL AUTO_INCREMENT,
email VARCHAR(255),
points INT(11)
);
CREATE TABLE user_table_b (
id INT(11) NOT NULL AUTO_INCREMENT,
email VARCHAR(255),
score INT(11),
user_table_a_id INT(11)
);
用户在两个表中都是同一个人,由他们的电子邮件值标识。电子邮件是系统独有的。 user_table_b 中新增了user_table_a_id
字段,目前为空。使用电子邮件作为这两个表之间的链接,我想将每个 user_table_a id 的正确值更新到 user_table_b 中的相应位置。我知道这可以通过利用 php 或存储过程来完成,但我试图在没有这些东西的情况下做到这一点。这是我迄今为止失败的查询:
# this fails because the subquery returns more than one record and ...
# because a subquery cannot reference the table being update in the main query
UPDATE user_table_b SET user_table_a_id = (SELECT user_table_a.id FROM user_table_a, user_table_b WHERE user_table_a.email = user_table_b.user_email GROUP BY user_table_a.id) WHERE 1;
我不确定我正在尝试的是否可行,我会继续研究。感谢所有提供帮助的人。
最佳答案
UPDATE user_table_b b SET user_table_a_id = (SELECT a.id FROM user_table_a a WHERE a.email = b.email);
关于mysql - MySQL中的动态海量表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933770/