【问题标题】:SQL Server add rows using different foreign key valuesSQL Server 使用不同的外键值添加行
【发布时间】:2015-03-19 20:36:18
【问题描述】:

假设我有 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 = id 属于 table1ID = 2 的值。

我试过这个查询:

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)。我该怎么做呢?任何帮助将不胜感激。

【问题讨论】:

  • 我完全不清楚您在这里要做什么。您可以在 sqlfiddle.com 创建一个 sqlfiddle 以开始使用吗?用一些数据而不是这堵文字墙更容易理解你想要做什么。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2017-09-06
    • 2016-01-05
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多