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

将多对多转换为一对一(mysql),mysql,one-to-many,one-to-one,relationships,Mysql,One To Many,One To One,Relationships,我们更改了数据库模式,并使用联接表accounts\u users将用户/帐户之间的关系从1-1移动到多对多 所以我们有 账户, 用户, 帐户用户(用户id和帐户id) 我们的数据仍然是1比1,我们决定后退。所以我需要sql向后移动: 要迁移,我使用了: INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts 要向后移动,我已尝试: UPD

我们更改了数据库模式,并使用联接表accounts\u users将用户/帐户之间的关系从1-1移动到多对多

所以我们有 账户, 用户, 帐户用户(用户id和帐户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。我要找的是一些工作sql,它将从accounts\u用户获取数据,并将用户id放入account表中。谢谢,Joel

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

您可以尝试

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

如果在
帐户中有许多列用户必须返回到
帐户中,那么这将变得非常乏味,如果ID有任何问题,这将不起作用(因此我之前的答案)。有多少列?

别忘了检查该规则的例外情况(假设?)