我们更改了数据库架构,并使用连接表 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 放入帐户表中。谢谢,乔尔
最佳答案
你可以试试...
UPDATE accounts
SET user_id = (SELECT user_id
FROM accounts_users
WHERE accounts_users.accounts_id = accounts.accounts_id);
不过,如果您在 accounts_users
中有很多列必须返回到 accounts
中,那将变得非常乏味,如果有的话将无法工作ID 有任何问题(因此我之前的回答)。有多少列?
关于mysql - 将多对多转换为一对一(mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493138/