MySQL中的动态质量表更新

时间:2013-07-29 20:39:40

标签: 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;

我不确定我的尝试是否可行,我会继续研究。感谢任何帮助过的人。

2 个答案:

答案 0 :(得分:2)

您可以在更新中使用内部联接。这应该有用(如果没有,请告诉我):

UPDATE user_table_b utb 
    INNER JOIN user_table_a uta
    ON uta.email = utb.email
    SET utb.user_table_a_id = uta.id;

答案 1 :(得分:2)

UPDATE user_table_b b SET user_table_a_id = (SELECT a.id FROM user_table_a a WHERE a.email = b.email);