2013-08-26 161 views
0

Table pcKeyword kwId |關鍵字Double INNER JOIN and SUM

表proPhrase kwId | vote

表contraPhrase kwId |投票

所以投票列是一個整數,我想概括爲指定關鍵字 事情是這樣的:

exampleKeyword | 12 | 47

直到現在我有這個,但我正常不工作:

SELECT pcKeyword.kwId, pcKeyword.keyword, SUM(proPhrase.vote) AS proVotes, SUM(contraPhrase.vote) AS contraVotes 
FROM pcKeyword 
INNER JOIN proPhrase ON proPhrase.kwId = pcKeyword.kwId 
INNER JOIN contraPhrase ON contraPhrase.kwId = proPhrase.kwId 
GROUP BY pcKeyword.keyword ORDER BY pcKeyword.keyword ASC 

回答

0

你可以嘗試:

SELECT kwId, keyword, proVotes, contraVotes 
FROM pcKeyword 
INNER JOIN (SELECT kwId pid, SUM(vote) proVotes 
      FROM proPhrase GROUP BY kwId) p ON pid = kwId 
INNER JOIN (SELECT kwId cid, SUM(vote) contraVotes 
      FROM contraPhrase GROUP BY kwId) c ON cid = kwId 

這樣,您就在他們的派生表分組只有一次,不要太經常! (由表分隔成其派生表我可能也整潔了整個語法,因爲現在的列名是每個派生表表達式中是唯一的。)

在這裏看到:http://sqlfiddle.com/#!2/70634/1

編輯

只是爲了完整性,這裏LEFT JOIN S和COALESCE()版本,以確保你得到的情況下有意義的結果,其中有沒有票:

SELECT kwId, keyword, 
     COALESCE(proVotes,0) proVotes, 
     COALESCE(contraVotes,0) contraVotes 
FROM pcKeyword 
LEFT JOIN (SELECT kwId pid, SUM(vote) proVotes 
      FROM proPhrase GROUP BY kwId) p ON pid = kwId 
LEFT JOIN (SELECT kwId cid, SUM(vote) contraVotes 
      FROM contraPhrase GROUP BY kwId) c ON cid = kwId 

SQLfiddle:http://sqlfiddle.com/#!2/ec51cb/1

+0

這是不工作:-(沒有列proVotes並沒有contraVotes –

+0

一起粘貼一大堆的時候,對不起,我犯了一個錯誤。立即看到我的編輯! Grrr,另一個編輯,請再次檢查... – cars10m

+0

也不工作我得到這個erroe:未知列'proVotes'在'字段列表' –