2016-06-15 143 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

謝謝!問題回答了! –