2015-04-30 226 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