[英]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.