2015-04-30 213 views
1

我正在尋找高級MySQL查詢的幫助。我目前的查詢,如下所示,工作正常。我想添加一個額外的字段,所以我不必創建一個單獨的查詢。新字段count(TableA.Field05)應產生TableA的總記錄數。高級MySQL左連接IFNULL查詢

表A具有10個記錄
表B具有100個記錄

SELECT count(TableB.Answer) AS unAnswered 
FROM TableA 
LEFT JOIN TableB 
ON (TableA.Field01 = TableB.fkField01 AND TableA.Field02 = TableB.fkField02 AND TableB.Answer = '1') 
WHERE TableB.fkField03 IS NULL AND TableA.Field04 = 10 
GROUP BY TableA.Field01, TableA.Field02 

結果:

unAnswered = 8這是正確的

期望的結果是:

unAnswered = 8 count(TableA.Field05) = 10

-

這是一個數據和結果的例子。

SELECT count(TableB.Answer) AS unAnswered 
FROM TableA LEFT JOIN TableB ON (TableA.Field01 = TableB.fkField01 AND TableA.Field02 = TableB.fkField02 AND TableB.Answer = '1') 
WHERE TableB.fkField03 IS NULL AND TableA.Field04 = 10 
GROUP BY TableA.Field01, TableA.Field02 

TableA 
Field01 = 1, Field02 = 1, Field03 = 10 
Field01 = 1, Field02 = 2, Field03 = 21 
Field01 = 1, Field02 = 3, Field03 = 22 
Field01 = 1, Field02 = 4, Field03 = 34 

TableB 
Field01 = 1, Field02 = 1, Answer = 1 
Field01 = 1, Field02 = 2, Answer = 1 
Field01 = 1, Field02 = 3, Answer = 1 
Field01 = 2, Field02 = 1, Answer = 1 
Field01 = 2, Field02 = 2, Answer = 1 
Field01 = 2, Field02 = 3, Answer = 1 

Result 
count(TableB.Answer) AS unAnswered = 1 


Result trying to achive 
count(TableB.Answer) AS unAnswered = 1 
count(TableA.Field03) = 4 

任何幫助將不勝感激。

+0

如果添加COUNT(tableA.field05)'會發生什麼?請顯示一些示例數據和預期結果,並解釋爲什麼此查詢不起作用。 – AdamMc331

+0

當我添加計數(TableA.Field05),我得到unAnswered = 8和計數(TableA.Field05)= 8 – Jecker

+1

我會嘗試添加一些示例數據到您的問題或建立一個[SQL小提琴](http:// www .sqlfiddle.com),所以我可以看到你想要做什麼,並幫助你弄清楚。 – AdamMc331

回答

0

我剛想出了我自己的問題。

SELECT **COALESCE(count(DISTINCT TableB.Answer)) AS unAnswered, count(DISTINCT TableA.Field05)** 
FROM TableA 
LEFT JOIN TableB 
ON (TableA.Field01 = TableB.fkField01 AND TableA.Field02 = TableB.fkField02 AND TableB.Answer = '1') 
WHERE TableB.fkField03 IS NULL AND TableA.Field04 = 10 
GROUP BY TableA.Field01, TableA.Field02 

添加COALESCE和DISTINCT解決了我的問題。感謝大家的幫助。

0

如果你只是希望表A的數量添加到您的當前查詢只是把它添加到你的SELECT語句:

「SELECT COUNT(TableB.Answer)未答覆,計數(TableA.Field02)FROM表A ...'

+0

不,我試圖從一個查詢中得到兩個答案。 – Jecker

+0

如何使用像'SELECT count(TableA.Field05)這樣的UNION語句FROM TableA UNION SELECT count(TableB.Answer)FROM TableB ...' – Matt

+0

它看起來像有可能性,但它將結果添加爲行。我正試圖在同一行上得到兩個結果。 – Jecker