关于另一个更复杂的问题,我正在做一些 SQL 数据库原型(prototype)设计。我想执行以下操作:
- 使用一个现有的 SQL 数据库,其中包含一个名为“studentNames”的列
- 使用另一个现有的 SQL 数据库,该数据库有一个名为“ACTvocabularyWords”的列
- 在新数据库中将它们“合并”在一起,这样我就可以跟上哪些学生掌握和未掌握哪些 ACT 词汇。
为了清楚起见,这里是两个原始数据库的示例(大致):
studentNames:
-------------
adam applewhite
betty boop
carl creepy . . .
这是包含词汇的数据库:
actVocabWords:
--------------------
androgynous
ctenoid
stygian . . .
合并后的表(如果你愿意的话)应该是这样的:
studentName: actVocabWord: mastered:
----------------------------------------------------------------
adam applewhite androgynous T
adam applewhite ctenoid T
adam applewhite stygian F
betty boop androgynous T
betty boop ctenoid F
betty boop stygian F
carl creepy androgynous T
carl creepy ctenoid T
carl creepy stygian T
(我很抱歉在这个网站上创建表格很糟糕)
我确信有一种相当简单的方法可以进行这种合并/连接,但我不知道如何调用它(以便我可以搜索文档)。
据我所知,UNION、UNION ALL、OUTER JOIN、INNER JOIN、BATCH INSERT 等从来没有真正打算做这种事情。有人还建议我不要尝试从 vocab 数据库中提取数据,将其加载到列表或数组(例如,Java),手动处理合并,然后创建一个新数据库。
有谁知道我应该将这种奇怪类型的“合并”称为什么,以便我可以阅读 SQL 文档?
谢谢!
最佳答案
你没有解释如何得到最后一列,mastered
。
您得到带有交叉连接
的行:
select studentName, actVocabWord
from StudentNames sn cross join actVocabWords vw;
这通常会与另一个表结合使用,比如 mastered
来获取标志:
select sn.studentName, vw.actVocabWord,
(m.studentName is null) as mastered
from StudentNames sn cross join
actVocabWords vw left join
mastered m
on m.studentName = sn.studentName and m.actVocabWord = vw.actVocabWord
关于mysql - "merging"两个SQL数据库的两列变成第三个(有一个catch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824768/