1

我需要执行从 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;

我不确定我正在尝试的是否可能,我将继续研究。感谢任何提供帮助的人。

4

2 回答 2

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;
于 2013-07-29T20:44:05.190 回答
2
UPDATE user_table_b b SET user_table_a_id = (SELECT a.id FROM user_table_a a WHERE a.email = b.email);
于 2013-07-29T20:45:02.413 回答