将多对多转换为多对一(mysql)

时间:2010-08-16 12:37:15

标签: mysql one-to-many one-to-one relationships

我们更改了数据库架构,并使用连接表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放入帐户表。谢谢,乔尔

2 个答案:

答案 0 :(得分:1)

你可以试试......

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

如果accounts_users中有很多列必须返回accounts,那将会变得非常繁琐,但如果有任何问题,它们将无效(因此我以前的答案)。有多少列?

答案 1 :(得分:0)

如果你的映射是1-1,那么只需选择第一个结果(你知道只有一个)