使用外键表的ID更新现有记录表

时间:2013-08-26 10:40:43

标签: sql sql-server sql-server-2008 tsql

我有以下表格:

Diary Table

History Table

我最近添加了[History Table ID]列,并在History表中添加了一个Foreign Key Reference。必须发生的是,必须使用History表的ID值更新[H​​istory Table ID]列的值。我已经能够使用2个条目来正确使用,条目在历史记录表的“描述”列中具有Diary表的ID。下面的查询实现了:

Update Diary 
SET [History Table ID] = History.ID
from History with (nolock)
WHERE [Lookup Table HA] = 7 
and [Lookup Table HAS] = 19 
and Description LIKE 'Diary item (%'
and PATINDEX('%)%', Description) > 13
and Dairy.ID = SUBSTRING(Description, 13, PATINDEX('%)%', Description)-13)

有没有其他方法可以更新?我无法理解这一点。

提前致谢。

更新

请参阅下面的更新表格镜头:这是我更新和加入的问题所在:

Updated Diary and History

2 个答案:

答案 0 :(得分:0)

也许这不正确,但看起来Global Id(和Issue number)连接两个表。如果是这样,你可以这样做:

Update Diary 
    SET [History Table ID] = History.ID
    from History with (nolock)
    WHERE Diary.[Global ID] = History.[Global ID] and
          Diary.[Issue number] = History.[Issue number];

否则,您需要弄清楚将History中的一条记录连接到Diary表中的记录的逻辑。

编辑:

让我假设你想要多个匹配时最大的历史ID:

Update Diary 
    SET [History Table ID] = h.ID
    from (select [Global ID], [Issue number], max(id) as maxid
          from History with (nolock)
          group by [Global ID], [Issue number]
         ) h 
    WHERE Diary.[Global ID] = h.[Global ID] and
          Diary.[Issue number] = h.[Issue number];

答案 1 :(得分:0)

正如您在评论中提到的那样,“IssueNumber将始终相同.BlobalId在两个表中也将始终相同。”所以这样可以正常工作:

 UPDATE Diary 
      SET [History Table ID] = History.ID
    FROM History WITH (NOLOCK)
      WHERE Diary.[Global ID] = History.[Global ID]
         AND Diary.IssueNumber = History.IssueNumber