mysql - MySQL中的动态海量表更新

标签 mysql sql-update multiple-tables

我需要执行以下从 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/

相关文章:

mysql - 'alter table rename' 和 'rename table' 有什么区别?

php - MYSQL和PHP获取记录的性能

mysql - 更新列数据mysql

android - Android Room 数据库中的@Query Update 不更新主键字段

MySQL 从连接表中计算两个组

java - Hadoop 映射器输出到 HBase 表和一个缩减器

mysql - 如何确定表 1 中的主键是否出现在表 2 中

php - php mysql 每天找出三个最畅销的产品

mysql - 使用数组更新列(Mysql 过程)

postgresql - 跨多个相关表的 Postgres 全文搜索