2013-08-26 71 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'在'字段列表' –