【发布时间】: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” 太含糊了。
标签: sql sql-server sql-server-2008 merge