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 是模棱两可的,我需要先选择某种选择或分钟或类似的东西。

** 需要明确的是,我确定数据中仍然存在 1-1 关系,但我无法弄清楚将现有表中的数据带回原始表的 sql。我正在寻找的是一些工作 sql,它将从 accounts_users 获取数据并将 user_id 放入 account 表中。谢谢,乔尔

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,那么只需选择第一个结果(您知道只有一个)

于 2010-08-16T12:39:33.377 回答