使用JOIN在COUNT中嵌套COUNT

时间:2017-06-19 21:50:13

标签: mysql

真的想弄清楚,为什么SQL查询不会通过。我认为结构有点不对,但无法弄清楚到底在哪里。对表的引用都是正确的。

SELECT tap_questionnaires.id, 
   tap_questionnaires.NAME, 
   tap_questionnaires.active, 
   tap_useranswers_ip.questionnaire_id, 
   Count(tap_useranswers_ip.ip) 
FROM   tap_questionnaires 
       LEFT JOIN tap_useranswers_ip 
              ON tap_questionnaires.id = tap_useranswers_ip.questionnaire_id 
WHERE  author_email = admin@admin.com 

2 个答案:

答案 0 :(得分:0)

如果使用count,则需要对select子句中的其他列使用group by。

SELECT TAP_questionnaires.id, TAP_questionnaires.name, TAP_questionnaires.active, TAP_useranswers_ip.questionnaire_id, COUNT(TAP_useranswers_ip.ip) FROM TAP_questionnaires LEFT JOIN TAP_useranswers_ip on TAP_questionnaires.id=TAP_useranswers_ip.questionnaire_id WHERE author_email="admin@admin.com"
group by TAP_questionnaires.id, TAP_questionnaires.active

我认为TAP_questionnaires.name没有必要,因为我认为它取决于TAP_questionnaires.id。 TAP_useranswers_ip.questionnaire_id与TAP_questionnaires.id的值相同

希望有所帮助!

答案 1 :(得分:0)

我认为这个版本更清晰:

SELECT q.id, q.name, q.active,  COUNT(a.ip)
FROM TAP_questionnaires q LEFT JOIN
     TAP_useranswers_ip a
     ON on q.id = a.questionnaire_id
WHERE author_email = 'admin@admin.com'
GROUP BY q.id, q.name, q.active;

注意:

  • 您需要GROUP BY
  • 你需要在字符串常量周围加单引号。
  • 表别名使查询更易于编写和阅读。
  • 没有理由包含a.questionnaire_id。你已经有了q.id。