代码之家  ›  专栏  ›  技术社区  ›  Joelio

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

  •  2
  • Joelio  · 技术社区  · 14 年前

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

    用户,

    我们的数据仍然是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表中。谢谢,乔尔

    2 回复  |  直到 14 年前
        1
  •  1
  •   Brian Hooper    14 年前

    你可以试试。。。

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

    accounts_users 必须回去 accounts

        2
  •  0
  •   pauljwilliams    14 年前