SQL - Как создать новое отношение между таблицами A & C на основе существующего отношения между A & B и массой? - PullRequest
1 голос
/ 07 сентября 2011

У меня есть следующие таблицы в базе данных MySQL 5.x:

Users:
 id
 county_id
 state_id

Counties:
 id
 state_id

States:
 id

Состояния - это новая таблица, каждый округ принадлежит одному штату, каждый пользователь до сих пор принадлежал одному округу - я хочу иметь возможность напрямую связать пользователя с государством, а затем удалить таблицу округов.

Я могу выяснить, к какому состоянию принадлежит пользователь, ссылающийся на user-> county-> state, и могу заново связать отдельных пользователей с чем-то вроде следующего псевдо-SQL:

UPDATE users
 SET state_id = (SELECT id FROM state WHERE state_id=(SELECT state_id FROM counties WHERE id=users.county_id) )
WHERE user_id=324235;

но не уверен, как это сделать для всех пользователей 320k + в моей базе данных.

Есть идеи?

1 Ответ

2 голосов
/ 07 сентября 2011

Попробуйте это:

UPDATE FROM users AS u
INNER JOIN counties as c
  ON u.county_id = c.id
INNER JOIN states as s
  ON c.state_id = s.id
SET u.state_id = s.id

Затем положите на кофейник.320к записей может занять немного.Вы можете посмотреть на удаление ваших индексов перед выполнением обновления и затем воссоздать их, когда вы закончите.Это может сэкономить время на обновление индексов и таблицы.

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