簡體   English   中英

將多對多轉換為一對一(mysql)

[英]Convert many to many to one to one (mysql)

我們更改了數據庫架構,並使用聯接表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模棱兩可,所以我需要先進行某種選擇,然后再進行min或類似的選擇。

**要明確,我確定數據中仍然具有1-1關系,但是我無法弄清楚sql將現有表中的數據重新帶回原始表中。 我正在尋找的是一些可以運行的sql,它將從accounts_users中獲取數據並將user_id放入account表中。 謝謝,喬爾

你可以嘗試...

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

這會變得非常乏味,如果你有很多的列accounts_users是要回去的accounts ,不過,如果有與IDS(因此我以前的答案)任何問題,將無法正常工作。 有幾列?

如果您的映射是1-1,則只需選擇第一個結果(您知道只有一個結果)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM