将两个表中的多行插入到一个表中
Posted
技术标签:
【中文标题】将两个表中的多行插入到一个表中【英文标题】:Insert multiple rows from two tables into one table 【发布时间】:2014-09-09 12:30:36 【问题描述】:我有两张桌子,每张桌子都有很多行。我想将这两个“合并”到另一个表中,我该怎么做呢?
我已经尝试过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'
我想要实现的是一个包含与 termIDs 相关的版本的表格。
我可以通过执行以下操作获得我想要的子集:
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
,因为我已经提取了子集,但是我该如何获取子集然后加入它们?
【问题讨论】:
这些表之间是否存在链接,或者您是否要插入所有可能的组合? 好的,现在我明白了,我发表评论时没有示例,您的目标是拥有所有可能的组合 (CROSS JOIN
)
这背后有具体的logic
吗?还是随机的?
如果你想编码,那么编码必须有逻辑。如果没有,那么您只能手动选择应该去什么和不应该去什么。
为什么 1.5 版本得到了 ID 1 和 2 的记录,而不是 ID 3?同样,为什么 ID 3 与版本 2.0 匹配,而没有其他记录匹配?如果您不告诉我们,我们怎么知道哪些版本适用于哪些 ID。不幸的是,“所有版本都不适用于所有 ID” 太含糊了。
【参考方案1】:
您正在寻找CROSS JOIN
,它是两个表的笛卡尔积。
INSERT INTO Table3
(ID,Version)
SELECT Id,Version
FROM Table1 CROSS JOIN Table2
【讨论】:
谢谢!这使我想到了以下解决方案: 1:声明一个临时表,其中包含我想要的学期 ID 子集。 2:交叉加入带有版本的学期ID。 3:将交叉连接插入versions_semesters 也感谢@Joël Salamin 对您删除的回复!以上是关于将两个表中的多行插入到一个表中的主要内容,如果未能解决你的问题,请参考以下文章