将两个表中的多行插入一个表中

时间:2014-09-09 12:30:37

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

我有两个表,每个表都有多行。我想把这两个“合并”到另一个表中,我该如何去做呢?

我已经尝试了INSERT INTO SELECT,但它没有做我想要的事情(或者我可能做错了)。

我的表格是:

Versions
  [version] VARCHAR(10)

Semesters
  [id] INT
  [semester] INT
  [name] VARCHAR(150)

Versions_semesters
  [semesterid] INT
  [version] VARCHAR(10)

来自版本和学期的一些示例数据:

Versions
  'Version1.0'
  'Version1.5'

Semesters
  1, 15, 'Autumn15'
  2, 15, 'Spring15'
  3, 15, 'Fall15'
  4, 16, 'Autumn16'
  5, 16, 'Spring16'
  6, 16, 'Fall16'

我想要实现的是一个包含与semesterID相关的版本的表。

通过执行以下操作,我可以获得所需的子集:

SELECT id FROM semesters WHERE semester = 16;
SELECT * from Versions;

这两个子集我想INSERT INTO Versions_semesters所以它看起来像这样:

Versions_semesters
  4, 'Version1.0'
  5, 'Version1.0'
  6, 'Version1.0'
  4, 'Version1.5'
  5, 'Version1.5'
  6, 'Version1.5'

任何人都有优雅(或丑陋)的解决方案吗?我想可以使用CROSS JOIN,因为我提取了子集,但是如何同时获取子集然后加入它们?

1 个答案:

答案 0 :(得分:3)

您正在寻找CROSS JOIN,这是两张桌子的笛卡尔积。

INSERT INTO Table3
(ID,Version)
SELECT Id,Version
FROM Table1 CROSS JOIN Table2