from子句中的Mysql子查询给出了语法错误

时间:2016-10-29 08:24:32

标签: mysql

我有一个数据库,我将用户给出的答案(表'risposta_utente')存储到属于不同课程的问题(表'lezioni')。 我希望得到用户回答问题所获得的最大平均投票数。

ID_corso_sede_utente根据一门课程的课程唯一标识用户(因为有多个课程)。

SELECT titolo, MAX(voto) as voto_max
FROM (
    SELECT AVG(voto_grezzo) as voto, ID_lezione
    FROM risposta_utente
    WHERE ID_corso_sede_utente = 260, risposta_utente.attivo = 1
    GROUP BY ID_lezione
) AS voti 
JOIN lezioni
ON lezioni.ID_lezione=voti.ID_lezione

第2行,第3行和第7行的Mysql信号错误(包围子查询的括号周围)。特别是它说:

  • 期待表达,“(”找到(第2行);
  • “(”(第3行)附近的意外令牌;
  • “)”(第7行)附近的意外令牌;
  • “AS”附近的未知关键字(第7行);
  • “voti”附近的意外令牌(第7行);

2 个答案:

答案 0 :(得分:1)

'where'子句应以“和”分隔,而不是逗号。

SELECT titolo, MAX(voto) as voto_max
FROM (
    SELECT AVG(voto_grezzo) as voto, ID_lezione
    FROM risposta_utente
    WHERE ID_corso_sede_utente = 260 **and** risposta_utente.attivo = 1
    GROUP BY ID_lezione
) AS voti 
JOIN lezioni
ON lezioni.ID_lezione=voti.ID_lezione

还有一件事,如果你正在运行这是unix mysql控制台,那么添加tab会抛出错误。删除每行前的空格并尝试

SELECT titolo, MAX(voto) as voto_max
FROM (
SELECT AVG(voto_grezzo) as voto, ID_lezione
FROM risposta_utente
WHERE ID_corso_sede_utente = 260 **and** risposta_utente.attivo = 1
GROUP BY ID_lezione
) AS voti 
JOIN lezioni
ON lezioni.ID_lezione=voti.ID_lezione

或尝试将其作为单行执行。

答案 1 :(得分:0)

where命令应该是表达式。

WHERE ID_corso_sede_utente = 260 AND risposta_utente.attivo = 1

WHERE ID_corso_sede_utente = 260 OR risposta_utente.attivo = 1

基于您的业务逻辑