2012-02-24 41 views
1

请参阅下面的SQL查询,它计算与numbersbusiness表匹配的总记录数。获取其余行

SELECT N.mobile, B.name, count(*) as Total FROM records as R 
LEFT JOIN business as B ON B.id = R.business_id 
LEFT JOIN numbers as N ON N.id = R.numbers_id 
group by N.mobile, B.name 

未包括在结果中。然而,也有剩余的行(N.mobile, B.name),如何将它们与Total会是0?

+0

你的问题不是很清楚 - 你可以张贴表格数据的例子吗? – lamplightdev 2012-02-24 17:18:42

+0

和您的预期结果 – 2012-02-24 17:26:11

回答

2

你是说有没有在​​records入口businessnumbers行,但要包括他们在伯爵?由于MySQL不支持FULL OUTER JOIN使用UNION得到你想要的结果:

SELECT N.mobile, B.name, count(*) as Total FROM records as R 
LEFT JOIN business as B ON B.id = R.business_id 
LEFT JOIN numbers as N ON N.id = R.numbers_id 
GROUP BY N.mobile, B.name 

UNION 

SELECT N.mobile, NULL, 0 
FROM numbers AS N 
LEFT JOIN records as R ON N.id = R.numbers_id 
WHERE r.numbers_id IS NULL 

UNION 

SELECT NULL, B.Name, 0 
FROM business AS B 
LEFT JOIN records as R ON B.id = R.business_id 
WHERE r.business_id IS NULL 
+0

啊,你回答了我的问题:) +1对于 – 2012-02-24 17:40:04

+1

它不应该是第三部分中的SELECT NULL,B.Name,0? – adrien54 2012-02-24 17:48:23

+0

@ adrien54谢谢,赶上!固定... – 2012-02-24 17:49:44

0

用户OUTER JOIN而不是INNER JOIN包括这些丢失的记录:

SELECT N.mobile, B.name, count(*) as Total 
FROM records as R 
OUTER JOIN business as B ON B.id = R.business_id 
OUTER JOIN numbers as N ON N.id = R.numbers_id 
group by N.mobile, B.name 
+0

Michael Frederickson和Mohammedn的结果之间的区别是FULL OUTER JOIN和OUTER JOIN。我对这种差异感到好奇,并做了一些研究。看起来像FULL OUTER JOIN是使用的语法。 OUTER JOIN可能会工作,但可能会相同。我看到的所有参考文献都说LEFT OUTER,RIGHT OUTER和FULL OUTER,所以我会选择FULL OUTER JOIN – 2012-02-24 17:35:52

+0

whoa,Michael的答案消失了!我正要赶上它! – 2012-02-24 17:36:33

+2

@MichaelDurrant它现在回来了...有一个并发症,因为MySQL实际上不支持'全外连接...' – 2012-02-24 17:38:15