2

データベース スキーマを変更し、結合テーブル accounts_users を使用して、ユーザー/アカウント間の関係を 1 対 1 から多対多に移動しました。

したがって、アカウント、ユーザー、accounts_users (user_id および account_id) があります。

データはまだ 1 対 1 であり、元に戻すことにしました。だから私は戻るためにSQLが必要です:

移行するには、次を使用しました:

INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts

戻るために、私は試しました:

UPDATE 
    accounts
SET
    user_id = ru.user_id
FROM 
    accounts r, accounts_users ru
ON 
    r.id = ru.account_id


Update accounts
Set r.user_id = ru.user_id
FROM accounts r, accounts_users ru
WHERE r.id = ru.account_id


SELECT accounts_users.user_id
   INTO accounts
   FROM accounts_users
   INNER JOIN accounts
   ON accounts.id = accounts_users.account_id

これらはすべて、何らかのSQLエラーを引き起こします。私のSQLがあいまいで、ある種のselect firstまたはminなどが必要なためだと思います。

**明確にするために、データにはまだ1対1の関係があると確信していますが、既存のテーブルから元のテーブルにデータを戻すためのSQLを理解できません。私が探しているのは、accounts_users からデータを取得し、user_id を account テーブルに入れる実用的な SQL です。ありがとう、ジョエル

4

2 に答える 2

1

あなたは試すことができます...

UPDATE accounts
    SET user_id = (SELECT user_id
                       FROM accounts_users
                       WHERE accounts_users.accounts_id = accounts.accounts_id);

accounts_usersに戻らなければならない列がたくさんある場合、それはかなり面倒になりますがaccounts、IDに問題がある場合は機能しません(したがって、私の以前の回答)。柱は何本ありますか?

于 2010-08-16T14:17:52.367 に答える
0

マッピングが 1-1 の場合は、最初の結果を選択するだけです (1 つしかないことがわかっています)。

于 2010-08-16T12:39:33.377 に答える