Копировать записи одного года в другой год - PullRequest
1 голос
/ 01 июня 2011

У меня есть три таблицы: Штат, Город и Деревня.

State   (PK_Id,Name,Year)
City    (PK_Id,Name,FK_StateId)
Village (PK_Id,Name,Year,FK_CityId)

PK означает первичный ключ, а FK - внешний ключ.Я хочу скопировать каждый штат прошлого года в новый год, каждый город прошлого года и каждую деревню прошлого года.

Возможно ли это?Как мне это сделать?Это действительно сложнее, чем кажется.

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

Ответы [ 2 ]

1 голос
/ 01 июня 2011
INSERT INTO State (Name, Year)
SELECT S.Name, 2011
FROM State S
WHERE S.Year = 2010

INSERT INTO City (Name, FK_StateId)
SELECT C.Name, S_new.PK_Id
FROM City C
INNER JOIN State S_old ON C.FK_StateId = S_old.PK_Id
  AND S_old.Year = 2010
INNER JOIN State S_new ON S_old.Name = S_new.Name
  AND S_new.Year = 2011

INSERT INTO Village (Name, Year, FK_CityId)
SELECT V.Name, 2011, C_new.PK_Id
FROM Village V
INNER JOIN City C_old ON C.FK_CityId = C_old.PK_Id
  AND C_old.Year = 2010
INNER JOIN City C_new ON C_old.Name = C_new.Name
  AND C_new.Year = 2011
0 голосов
/ 01 июня 2011

Вы можете использовать временные таблицы для хранения копии 3 таблиц. Обновите год во всех временных таблицах, а затем вставьте обратно в основные таблицы.

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