2011-06-01 47 views
1

我有三张桌子,州,市和村庄。将一年的记录复制到另一年

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

PK表示主键,FK是外键。我想把去年的每一个状态都复制到去年的新年以及去年的每个城市和去年的每个村庄。

可能吗?我该怎么做?这似乎比看起来更难。

更新: 当我想将去年的城市复制到新的一年时出现问题。当我决定将去年的村庄复制到新的一年时,这似乎是不可能的。

+1

难道你不能更新一年吗?需要您的问题更清晰。 – Aravind 2011-06-01 05:34:59

+0

在插入新的City行时,您是否遇到了选择正确的FK_StateId值的问题? – 2011-06-01 05:59:39

+0

是的,对于村庄我也有这个问题\ – 2011-06-01 06:06:26

回答

1
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

所有主键都是标识。 – 2011-06-01 06:35:24

+0

年份栏的类型为Int。 – 2011-06-01 06:35:45

+0

村庄怎么样 – 2011-06-01 08:37:03

-1

您可以使用临时表来存储3个表的副本。在所有临时表中更新年份,然后插回到主表中。

+0

不是的,当我去年将一份去年的村庄复制到与去年城市有关的表村时,但它们必须与新年的城市相关。 – 2011-06-01 05:42:21

+1

你需要克隆/复制村庄和城市吗? – Arvo 2011-06-01 06:18:06

+0

是的,是的,是的... – 2011-06-01 08:34:06

相关问题