2013-07-12 147 views
-2

我有表:JOIN 2个表MySQL查询

a

id, title, description 
1, test , test 
2, test , test 

b

id, a_id, vw 
1, 2, 4 

,我想创建查询以从创建此

IDSUM(vw) from b,but when b does not have a_id must display vw 。

+0

询问代码**的问题必须证明对所解决问题的最小理解**。包括尝试解决方案,为什么他们没有工作,以及预期的结果。另见:[Stack Overflow question checklist](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – Kermit

回答

3

做一个左外连接,就像这样:

select a.id, sum(ifnull(b.vw, 0)) 
    from a 
    left outer join b on a.id = b.a_id 
    group by a.id 

如果要筛选B,请记住,你有一个左外连接,这样,你有两个选择,你把一个过滤器在左外的on加入或你把它放在那里一个ISNULL

第一种选择:

select a.id, sum(ifnull(b.vw, 0)) 
    from a 
    left outer join b on a.id = b.a_id and b.a_id = {id_user} 
    group by a.id 

第二个选项:

select a.id, sum(ifnull(b.vw, 0)) 
    from a 
    left outer join b on a.id = b.a_id 
    where isnull(b.a_id) = 1 or b.a_id = {id_user} 
    group by a.id 
+0

它只显示一条记录:/ with vw from all(?) –

+0

I'我已经忘了分组的条款! :) – saamorim

+0

很好,但是当b没有a_id记录时它不显示0 –

2

你在找这样的事吗?

SELECT a.id, SUM(IF(b.a_id IS NULL, 0,b.vw)) 
FROM a,b 
WHERE a.id = b.a_id