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

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top