简体   繁体   中英

SQL query wrong result

i have this query:

SELECT `completed`.`ID` AS `ID`,`completed`.`level` AS `level`,`completed`.`completed_in` AS `completed_in`, COUNT(1) AS `right_answers_num` 
FROM `completed` 
INNER JOIN `history` ON `history`.`ID` = `completed`.`ID` 
INNER JOIN `questions` ON `questions`.`ID` = `history`.`question`
WHERE `completed`.`student_id` = '1' AND `questions`.`answer` = `history`.`answer`       
GROUP BY `completed`.`ID` 
ORDER BY `completed`.`completed_in` DESC

what i need is to get info of each test in completed table (id,level,completed_in,right_answer_num)
the problem with that query is that if there is no one right answer(history.answer = questions.answer) then it doesn't return the row, while it should return the row(id,level,completed_in) and the right_answer_num(counter) should be zero..

please help me,, thanks ahead.

SELECT 
    completed.ID AS ID,
    completed.level AS level,
    completed.completed_in AS completed_in, 
    COUNT(questions.answer) AS right_answers_num 
FROM completed
        INNER JOIN history  ON history.ID = completed.ID
        LEFT JOIN questions ON questions.ID = history.question AND questions.answer = history.answer
WHERE 
    completed.student_id = '1'  
GROUP BY 
completed.ID 
ORDER BY completed.completed_in DESC

使用INNER JOINLEFT OUTER JOIN intead。

The second inner join is what's causing rows with no record in the questions table to be omitted. An inner join will only return rows that have data in all corresponding tables. Change the second inner join to a left join like so:

SELECT 
    completed.ID AS ID,
    completed.level AS level,
    completed.completed_in AS completed_in, 
    COUNT(questions.answer) AS right_answers_num 
FROM completed
INNER JOIN history ON history.ID = completed.ID 
LEFT JOIN questions ON questions.ID = history.question
WHERE completed.student_id = 1       
GROUP BY completed.ID 
ORDER BY completed.completed_in DESC

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM