将临时表行合并到每个不同ID的表中

时间:2014-11-20 01:38:37

标签: sql-server-2008 merge temp-tables

我有一个标记输出(当前输出到临时表),我需要将其合并到另一个表中。应将每组标记插入最终表中每个不同ID的新行。

例:
临时表:

标记

------

ABC
ABB
ACC
等(此临时表中有大约50,000行。


ID表
ID标记
--- ------

1现有标记
1 ABC 1 ABB
1 ACC
1等(适用于所有50k标记)
2现有标记
2 ABC 2 ABB
2 ACC中 2等(适用于所有50k标记)
重复表格中的所有ID。 150-5000之间的任何地方。


1 个答案:

答案 0 :(得分:1)

cross join应该这样做,它会产生临时表中标记集的笛卡尔积和id表中的id集:

insert ID_Table (id, marker)
select distinct i.id, m.marker
from ID_Table i
cross join temp_table m
-- or use the statement below to filter out existing markers
-- cross join (
--   select marker 
--   from temp_table 
--   where marker not in (
--     select marker from id_table
--   )
-- ) m

这假设临时表中的新标记不在id表中 - 如果它们可能是你想要先过滤现有的那些。

虽然要注意将50,000行与150-5000行组合会产生大量行(7.5到2.5亿之间)并且可能需要很长时间;但也许这就是你想要的?