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

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top