SQL Server使用不同的外键值添加行

时间:2015-03-19 20:36:19

标签: sql-server database foreign-keys primary-key

说我有3张桌子:

表1

Table1ID (pk) |
Table1Value

表2

Table2ID (pk) | Table1ID (fk) | Table2Value

表3

Table3Id (pk) | Table2ID (fk) | Table3Value

我有这样的数据:

表1:

1 | Table1Value1
2 | Table1Value2

表2:

 1 | 1 | Table2Value1
12 | 1 | Table2Value2
35 | 2 | Table2Value1 (same value as 1st entry above for now)
36 | 2 | Table2Value2 (same value as 2nd entry above for now)

表3:

1 | 1 | Table3ValueData1
2 | 12 | Table3ValueData2

现在,我现在要做的就是克隆table3数据,而是设置Table2ID =属于table1ID = 2的值的id。

我尝试了这个查询:

INSERT INTO Table3 (Table2ID, Table3Value)
   SELECT 
      Table2ID, Value
   FROM 
      Table3 t3 
   JOIN 
      Table2 t2 on t3.Table2ID = t2.Table2
   WHERE
      Table1ID = 1

不幸的是,这只是使用相同的Table2ID重复数据:

 1 | 1 | Table3ValueData1
 2 | 12 | Table3ValueData2
52 | 1 | Table3ValueData1
53 | 12 | Table3ValueData2

这就是我希望Table3中的数据看起来像:

 1 | 1 | Table3Value1Data1
 2 | 12 | Table3ValueData2
52 | 35 | Table3ValueData1
53 | 36 | Table3ValueData2

现在Table3中的数据应保持不变,但外键现在应该指向不同的父级(35和36而不是1和12)。我该怎么做呢?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我有点不清楚你究竟想做什么,但假设我理解正确,你可以这样做:

insert into Table3
select b.Table2ID, a.Table3Value
from (select t2.Table2Value, t3.Table3Value from Table3 t3 join Table2 t2 on t3.Table2ID = t2.Table2ID) a
join (select Table2ID, Table2Value from Table2 where Table1ID = 2) b on a.Table2Value = b.Table2Value

查看我的Fiddle