2012-02-24 50 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