2016-06-15 145 views
1

在另一个更复杂的问题中,我正在做一些SQL数据库原型设计。我要做到以下几点:将两个SQL数据库的两列“合并”成第三个(有一个catch)

  1. 采取的是有一个名为列现有的SQL数据库“studentNames”
  2. 采取的是有一个名为列另一个现有的SQL数据库“ACTvocabularyWords”
  3. “合并”在一起在新的数据库中,我可以跟上哪些学生已经掌握并没有掌握哪些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文档?

谢谢!

+0

你可能谈论表,而不是数据库,因为数据库包含表格,表格包含列。 – dmitryro

+0

@ dmitryro:同意 - 我正在使用“表”和“数据库”,就像它们是可以互换的单词一样。显然,他们不是。谢谢。 –

回答

1

你不解释如何获得最后一列mastered

你有cross join得到行:

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 
+0

谢谢!问题回答了! –