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

标签 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 放入帐户表中。谢谢,乔尔

最佳答案

你可以试试...

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/

相关文章:

php - 使用php上传docx文件并将内容和图像存储到数据库中

MYSQL - 更新/内连接

java - 在新实体中保存映射集合

mysql - 子表在一对多更新过程中未更新

java - 使用主键进行 hibernate 一对一连接不起作用

php - 如何从数据库请求中获取多行

php - laravel 4.2 从 mysql 表中检索数据

java - JPA - 具有 OR 条件的 OneToMany

java - Hibernate OneToOne 加入唯一但不是主键

java - Hibernate 一对一单向 - id 未分配