有这个Mysql查询的问题

时间:2017-04-21 17:16:14

标签: php mysql sql join

您好我学习SQL并且我遇到了一些连接问题(我对它们有所了解)

我有这个问题

  

#1066 - 不是唯一的表/别名:' tbl_respuestas'

查询应该做什么,是计算有多少人(一般情况下,忽略用户)已回答' x',' y'问题' z'调查

SELECT COUNT(*) FROM tbl_respuestas
INNER JOIN tbl_encuesta_usuario ON tbl_encuesta_usuario.user_id = user.id
INNER JOIN tbl_encuesta ON tbl_encuesta.id = tbl_encuesta_usuario.tbl_encuesta_id
INNER JOIN tbl_encuesta_has_tbl_preguntas ON tbl_encuesta_has_tbl_preguntas.tbl_encuesta_id = tbl_encuesta.id
INNER JOIN tbl_preguntas ON tbl_preguntas.id = tbl_encuesta_has_tbl_preguntas.tbl_preguntas_id
INNER JOIN tbl_preguntas_has_tbl_respuestas ON tbl_preguntas_has_tbl_respuestas.tbl_preguntas_id = tbl_preguntas.id
INNER JOIN tbl_respuestas ON tbl_respuestas.id = tbl_preguntas_has_tbl_respuestas.tbl_respuestas_id 
WHERE tbl_respuestas.respuesta = 2

1 个答案:

答案 0 :(得分:2)

SELECT COUNT(*) FROM tbl_respuestasINNER JOIN tbl_respuestas行 没有意义,因此错误。 除非它是您想要的,否则您需要给出不同的名称/别名,如下所示:

SELECT COUNT(*) FROM tbl_respuestas r

INNER JOIN tbl_respuestas r2

另外作为快速说明,您可以像下面一样重写整个sql。 优良作法是为表提供较短引用的名称,并使sql看起来更清晰一些。 此外,如果您尝试加入的两个表具有相同的列名,那么您可以使用关键字USING,而不必编写该长行tbl_encuesta_usuario.user_id = user.id

请务必将r和r2放在其位置

SELECT COUNT(*) FROM tbl_respuestas r
    INNER JOIN tbl_encuesta_usuario u USING user_id
    INNER JOIN tbl_encuesta e ON e.id = u.tbl_encuesta_id
    INNER JOIN tbl_encuesta_has_tbl_preguntas hp ON hp.tbl_encuesta_id = e.id
    INNER JOIN tbl_preguntas p ON p.id = hp.tbl_preguntas_id
    INNER JOIN tbl_preguntas_has_tbl_respuestas hr ON hr.tbl_preguntas_id = p.id
    INNER JOIN tbl_respuestas r2 ON r2.id = hr.tbl_respuestas_id 
WHERE r.respuesta = 2