Rechnen Sie viele zu viele, um 12.59 Uhr (mysql)
-
28-09-2019 - |
Frage
Wir änderten Datenbankschema und bewegt, um eine Beziehung zwischen den Nutzern / Konten von einer 1-1 auf eine viele zu viele Join accounts_users Tabelle.
So haben wir Konten, Benutzer, accounts_users (user_id und account_id)
Unsere Daten sind noch 1-1, und wir haben beschlossen, wieder zu bewegen. Also brauche ich sql zurück zu bewegen:
Um Migrate ich verwendet:
INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts
zurück zu bewegen Ich habe versucht:
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
Alle diese geben ein SQL-Fehler von einer Art. Im erraten sein, weil meine SQL ist nicht eindeutig, und ich brauche eine Art von Auswahl ersten oder min oder so ähnlich.
** Um es klar, ich bin sicher, noch hat die 1-1-Beziehung in den Daten, aber ich kann die SQL zu bringen, die Daten aus den vorhandenen Tabellen wieder in die ursprünglichen Tabellen herauszufinden. Was im suchen ist einige Arbeits SQL, die die Daten von accounts_users nehmen und die user_id auf das Konto Tisch. Danke, Joel
Lösung
Sie könnten versuchen, ...
UPDATE accounts
SET user_id = (SELECT user_id
FROM accounts_users
WHERE accounts_users.accounts_id = accounts.accounts_id);
Das wird ganz schön langweilig, wenn Sie eine Menge von Spalten in accounts_users
haben, die in accounts
zurück zu gehen haben, aber, und nicht, wenn es irgendwelche Probleme mit dem ids ist (daher meine vorherige Antwort). Wie viele Spalten gibt es?
Andere Tipps
Wenn Sie Ihre Zuordnung ist 1-1 dann nur das erste Ergebnis aus (Sie wissen, dass es nur eine)