Mysql 当查询结果集为零时,如何获取显示记录?

Mysql 当查询结果集为零时,如何获取显示记录?,mysql,sql,Mysql,Sql,我正在查询多个表以获得每个答案的计数,当结果表中有记录时,此查询工作正常。我希望以这样的方式处理此查询:如果在结果表中找不到任何答案或问题的记录,则必须显示该值的计数“0”,以及相应的问题和答案。在这个查询中我需要做什么更改?或者有什么办法让我知道吗?提前谢谢 这是我的问题 SELECT s.NAME AS surveyname, COUNT(r.answer_id) AS totalAnswer, q.id AS questionid, q.question AS qu

我正在查询多个表以获得每个答案的计数,当结果表中有记录时,此查询工作正常。我希望以这样的方式处理此查询:如果在结果表中找不到任何答案或问题的记录,则必须显示该值的计数“0”,以及相应的问题和答案。在这个查询中我需要做什么更改?或者有什么办法让我知道吗?提前谢谢

这是我的问题

SELECT s.NAME AS surveyname,
    COUNT(r.answer_id) AS totalAnswer,
    q.id AS questionid,
    q.question AS question,
    a.answer AS answer,
    COUNT(r.textbox) AS totalTextbox,
    COUNT(r.textboxmulti) AS totalTextboxmulti,
    qt.template AS template,
    s.NAME AS surveyname,
    COUNT(r.other) AS other
FROM surveys s
INNER JOIN survey_results AS sr
    ON s.id = sr.survey_id
INNER JOIN results AS r
    ON sr.id = r.surveyresults_id
INNER JOIN questions AS q
    ON r.question_id = q.id
INNER JOIN questiontypes AS qt
    ON q.questiontype_id = qt.id
LEFT JOIN answers AS a
    ON r.answer_id = a.id
WHERE s.id = < cfqueryparam cfsqltype = "cf_sql_integer" value = "#arguments.surveyid#" >
GROUP BY q.id,
    a.id
ORDER BY q.id, a.id a.rank
如果有匹配的记录,则应在totalanswer或totaltextbox等中显示计数。

尝试添加此计数fNullr.other,0作为other

编辑


也如@慢编码器建议的,尝试在结果表上使用左联接。< /P>如果在任何问题或答案中都有0个记录出现在结果表中,那么您应该加入结果表。@慢编码器是正确的,我没有考虑…@慢编码器-当我离开结果表时,它没有显示R.Trbox的计数,r.textboxmulti和r.other,因为这些列将作为基本问题ID。@Waseem-我认为我们需要更多地了解您的表关系。查看您的查询,我唯一的猜测是,您可能必须将所有这些表与调查表左键联接。@waseem-同样,缺少记录点通常意味着没有错误的联接类型。但如果没有更具体的信息,我们只能猜测。正如SlowCoder所说,我们需要更多地了解关系和实际数据。使用类似于抛出一个我们可以独立测试的示例。另外,不要引用where子句中的任何外部联接表。否则,您将取消外部联接(即您仍在进行内部联接)。我这样做了,但它不会显示count textbox、textboxmulti和其他count列。

surveyname totalanswer qid question answer totaltextbox totaltextboxmulti template totalother
somename     0         1 what ?   yes     0              0              multiple  0
somename     0         1 what ?   no      0              0              multiple  0
    SELECT s.NAME AS surveyname,
    COUNT(r.answer_id) AS totalAnswer,
    q.id AS questionid,
    q.question AS question,
    a.answer AS answer,
    COUNT(r.textbox) AS totalTextbox,
    COUNT(r.textboxmulti) AS totalTextboxmulti,
    qt.template AS template,
    s.NAME AS surveyname,
    COUNT(ifnull(r.other,0)) AS other
FROM surveys s
INNER JOIN survey_results AS sr
    ON s.id = sr.survey_id
INNER JOIN results AS r
    ON sr.id = r.surveyresults_id
INNER JOIN questions AS q
    ON r.question_id = q.id
INNER JOIN questiontypes AS qt
    ON q.questiontype_id = qt.id
LEFT JOIN answers AS a
    ON r.answer_id = a.id
WHERE s.id = < cfqueryparam cfsqltype = "cf_sql_integer" value = "#arguments.surveyid#" >
GROUP BY q.id,
    a.id
ORDER BY a.rank