Convertir a muchos a muchos a uno a uno (MySQL)
-
28-09-2019 - |
Pregunta
Hemos cambiado el esquema de base de datos y se trasladó una relación entre los usuarios / cuentas de un 1-1 a un muchos a muchos usando una combinación accounts_users mesa.
Así que tenemos cuentas, usuarios, accounts_users (user_id y account_id)
Nuestros datos son todavía 1-1, y hemos decidido volver. Por eso es necesario SQL para mover hacia atrás:
Para migrar he utilizado:
INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts
Para retroceder he intentado:
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
Todo esto da un error de SQL de algún tipo. Im adivinar su porque mi sql es ambigua, y necesito algún tipo de primera o seleccione min o algo por el estilo.
** Para que quede claro, estoy seguro que todavía tienen la relación de 1-1 en los datos, pero no puedo averiguar el código SQL para traer los datos de las tablas existentes de nuevo en las tablas originales. Lo que estoy buscando es algo de sql de trabajo que se llevará a los datos de accounts_users y poner el user_id en la tabla de cuentas. Gracias, Joel
Solución
Usted podría intentar ...
UPDATE accounts
SET user_id = (SELECT user_id
FROM accounts_users
WHERE accounts_users.accounts_id = accounts.accounts_id);
Esto va a ser bastante tedioso si usted tiene una gran cantidad de columnas en accounts_users
que tienen que volver atrás en el accounts
, sin embargo, y no funcionará si hay algún problema con los identificadores (de ahí mi respuesta anterior). ¿Cuántas columnas hay?
Otros consejos
Si su asignación es 1-1 a continuación, sólo seleccione el primer resultado (ya se sabe que sólo hay una)