Обратная связь 1: много между двумя таблицами - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть две таблицы MySQL A и B. Таблица A содержит член ref, который является ссылкой ForeignKey на B.id. Это создает связь 1: много между B и A.

Это было в производстве в течение нескольких недель, но теперь я добавляю больше функций в свой код и понял, что я неправильно понял свое первоначальное отображение. Мне нужно было много: 1 отношений между B и A. То есть B.ref должен указывать на A.id, а не наоборот. До сих пор это не было проблемой, потому что до сих пор было все 1: 1. Как перенести мои данные в новую схему?

Я бы догадался:

  1. ALTER TABLE B ADD COLUMN ref INTEGER CONSTRAINT FOREIGN KEY (A.id) - сначала добавить столбец
  2. Запустите SQL-эквивалент "for row in A: row.ref.ref = row"
  3. ALTER TABLE A DROP COLUMN ref

Попытка сделать это в SQLAlchemy завершается неудачно с ошибкой циклической ссылки. Мне нужно сделать это в SQL, но я не знаком с необходимым синтаксисом SELECT + UPDATE. Помощь

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Для шага 2:

update b, a
    set b.ref = a.id
    where a.ref = b.id
0 голосов
/ 16 ноября 2010

Просто добавьте ограничение внешнего ключа как четвертый шаг, оно вам не понадобится при создании столбца.

...