問題可能是您正在使用where條件過濾連接的表,它將過濾連接中沒有匹配的部門服務,移動連接中的過濾並僅保留過濾器d
在where子句中:
SELECT d.mt_code,
d.dep_name,
d.service_name,
COUNT(t.id)
FROM DepartmentService AS d
LEFT JOIN tbl_outgoing AS t
ON d.mt_code = t.depCode
AND t.smsc = "mobitelMT"
AND t.sendDate BETWEEN '2014-07-01' AND '2014-07-02'
WHERE d.service_type = 'MT'
GROUP BY d.mt_code
要解釋爲什麼發生這種情況,我會帶你通過什麼與你的查詢,並與我的查詢情況,因爲數據集我就用這個:
states
____ _________
| id | state |
| 1 | Germany |
| 2 | Italy |
| 3 | Sweden |
|____|_________|
cities
____ ________ ___________ ____________
| id | city | state_fk | population |
| 1 | Berlin | 1 | 10 |
| 2 | Milan | 2 | 5 |
|____|________|___________|____________|
首先我會看看您的查詢。
SELECT s.id, s.state, c.population, c.city
FROM states s
LEFT JOIN cities c
ON c.state_fk = s.id
WHERE c.population < 10
所以le't走一步看一步,您選擇的三種狀態,留下了城市結束了加入:
____ _________ ____________ ________
| id | state | population | city |
| 1 | Germany | 10 | Berlin |
| 2 | Italy | 5 | Milan |
| 3 | Sweden | NULL | NULL |
|____|_________|____________|________|
的您篩選使用WHERE c.population < 10
人口,在這一點上你的左邊與此:
____ _________ ____________ ________
| id | state | population | city |
| 2 | Italy | 5 | Milan |
|____|_________|____________|________|
您鬆動德國柏林,因爲人口是10 ,但你也失去了瑞典其中有NULL,如果你想保持你應該在查詢中指定它的空值:
WHERE (c.population < 10 OR IS NULL c.population)
將返回:
____ _________ ____________ ________
| id | state | population | city |
| 2 | Italy | 5 | Milan |
| 3 | Sweden | NULL | NULL |
|____|_________|____________|________|
現在我的查詢:
SELECT s.id, s.state, c.population, c.city
FROM states s
LEFT JOIN cities c
ON c.state_fk = s.id
AND c.population < 10
之前連接兩個,我們過濾表格城市(使用ON
後的AND c.population < 10
條件),剩下的是:
____ ________ ___________ ____________
| id | city | state_fk | population |
| 2 | Milan | 2 | 5 |
|____|________|___________|____________|
因爲米蘭是人口未成年人超過10的唯一城市,現在我們可以加入兩個表:
____ _________ ____________ ________
| id | state | population | city |
| 1 | Germany | NULL | NULL |
| 2 | Italy | 5 | Milan |
| 3 | Sweden | NULL | NULL |
|____|_________|____________|________|
正如你所看到的數據左表中停留,因爲過濾條件被應用只有到城市表。
結果取決於你想要達到的,例如,如果你想過濾德國,因爲柏林有人口輕微高於10並保持瑞典,你應該使用第一種方法添加IS NULL
條件是什麼套的變化,如果你想要保留它,你應該使用第二種方法,並在左連接右側預過濾表格。
請提供一些樣品數據和要求的輸出 – 2014-08-28 09:12:32