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フィールドが新しく追加され、現在は空です。これら 2 つのテーブル間のリンクとして電子メールを使用して、各 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 に答える