Convertir beaucoup à plusieurs à un à un (mysql)
-
28-09-2019 - |
Question
Nous avons changé le schéma de base de données et déplacé une relation entre les utilisateurs / comptes d'un 1-1 à plusieurs à plusieurs en utilisant une jointure accounts_users de table.
Nous avons donc comptes, utilisateurs, accounts_users (user_id et account_id)
Nos données sont encore 1-1, et nous avons décidé de revenir en arrière. Donc j'ai besoin sql de revenir:
Pour Migrate I utilisé:
INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts
Pour revenir en arrière, j'ai essayé:
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
Tous ces éléments donnent une erreur sql de quelque sorte. Im deviner son parce que mon sql est ambigu, et je besoin d'une sorte de sélection première ou min ou quelque chose comme ça.
** Pour être clair, je suis sûr ont encore la relation 1-1 dans les données, mais je ne peux pas comprendre le sql pour amener les données des tables existantes de nouveau dans les tableaux originaux. Qu'est-ce que je cherche est une sql de travail qui prendra les données de accounts_users et mettre le user_id dans la table de compte. Merci, Joel
La solution
Vous pouvez essayer ...
UPDATE accounts
SET user_id = (SELECT user_id
FROM accounts_users
WHERE accounts_users.accounts_id = accounts.accounts_id);
Ça va être assez fastidieux si vous avez beaucoup de colonnes accounts_users
qui doivent revenir à accounts
, cependant, et ne fonctionnera pas s'il y a des problèmes avec les IDs (d'où ma réponse précédente). Combien de colonnes sont là?
Autres conseils
Si votre carte est 1-1 puis il suffit de sélectionner le premier résultat (vous savez qu'il n'y a qu'une seule)