"合并"两列SQL数据库中的两列成为第三列(带有catch)

时间:2016-06-15 01:42:43

标签: mysql database

关于另一个更复杂的问题,我正在做一些SQL数据库原型设计。我想做以下事情:

  1. 获取一个包含名为' studentNames'
  2. 的列的现有SQL数据库
  3. 使用另一个现有的SQL数据库,其中包含一个名为' ACTvocabularyWords'
  4. 的列
  5. "合并"他们一起在新的数据库中,这样我就可以跟上哪些学生掌握并且没有掌握哪些ACT词汇单词。
  6. 为了澄清,这里是两个原始数据库的样子(粗略地):

    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等从来没有真正意义上做过这种事情。我还建议不要尝试从词汇数据库中提取数据,将其加载到列表或数组(例如Java)中,手动处理合并,然后创建新数据库。

    有谁知道我应该把这种奇怪的类型称为"合并"这样我就可以阅读SQL文档了吗?

    谢谢!

1 个答案:

答案 0 :(得分: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