Конвертировать много ко многим, один к одному (mysql) - PullRequest
2 голосов
/ 16 августа 2010

Мы изменили схему базы данных и переместили отношения между пользователями / учетными записями с 1-1 на многие для многих, используя объединенную таблицу accounts_users.

Итак, мы имеем Счета, пользователей, account_users (user_id и account_id)

Наши данные все еще 1-1, и мы решили вернуться назад. Поэтому мне нужно sql, чтобы вернуться назад:

Для миграции я использовал:

INSERT INTO accounts_users (account_id,user_id) SELECT id AS account_id, user_id AS user_id FROM accounts

Чтобы вернуться назад, я попытался:

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

Все это дает какую-то ошибку sql. Я думаю, это потому, что мой sql неоднозначен, и мне нужно сначала выбрать что-нибудь, или мин, или что-то в этом роде.

** Для ясности, я уверен, что в данных все еще есть отношение 1-1, но я не могу понять, как sql перенести данные из существующих таблиц в исходные таблицы. Что мне нужно, так это какой-нибудь работающий sql, который возьмет данные из account_users и поместит user_id в таблицу account. Спасибо, Джоэл

Ответы [ 2 ]

1 голос
/ 16 августа 2010

Вы можете попробовать ...

UPDATE accounts
    SET user_id = (SELECT user_id
                       FROM accounts_users
                       WHERE accounts_users.accounts_id = accounts.accounts_id);

Это будет довольно утомительно, если в accounts_users будет много столбцов, которые должны вернуться в accounts, и не будет работать, если есть какие-либо проблемы с идентификаторами (отсюда мой предыдущий ответ ). Сколько там столбцов?

0 голосов
/ 16 августа 2010

Если ваше отображение равно 1-1, просто выберите первый результат (вы знаете, что он только один)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...