0

我有以下表格:

日记表

历史表

我最近添加了 [History Table ID] 列,并向 History 表添加了外键引用。必须发生的是,[History Table ID] 列的 Value 必须使用 History 表的 ID 值进行更新。我已经能够正确使用 2 个条目,这些条目在 History 表的 Description 列中具有 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)

有什么办法可以更新其余的吗?我只是无法理解这一点。

提前致谢。

更新:

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

更新日记和历史

4

2 回答 2

0

也许这不正确,但看起来Global Id(and 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];

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

编辑:

让我假设当有多个匹配项时您想要最大的历史 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];
于 2013-08-26T12:03:29.747 回答
0

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

 UPDATE Diary 
      SET [History Table ID] = History.ID
    FROM History WITH (NOLOCK)
      WHERE Diary.[Global ID] = History.[Global ID]
         AND Diary.IssueNumber = History.IssueNumber
于 2013-08-26T12:19:19.457 回答