MYSQL Join Confusion - PullRequest
       7

MYSQL Join Confusion

1 голос
/ 14 октября 2011

У меня есть эта таблица экзаменов и таблица ответов. Я хочу получить все записи, где экзамен для экзамена = 000663

SELECT COUNT(*)
  FROM Responses r  
  JOIN Exams E ON r.category_id_fk = E.id 
              AND r.exam_id_fk = 000663

На самом деле всего 106 строк содержат только ответы на экзамены 000663. Но он возвращает все строки ответов, которые относятся ко всем экзаменам! Разве это не должно учитывать r.exam_id_fk = 000663?

Я не использовал предложение where, потому что у меня есть 3 другие таблицы, присоединяющиеся к этому запросу.

Ответы [ 3 ]

4 голосов
/ 14 октября 2011

Условие 000663 относится к предложению WHERE, а не к условиям отношения JOIN.Даже если к этому присоединяются другие таблицы (как подзапрос), вы все равно можете использовать предложение WHERE.

select count(*)
from  Responses r  
join Exams E on r.category_id_fk = E.id 
WHERE r.exam_id_fk=000663;
0 голосов
/ 14 октября 2011

Я предполагаю, что вы используете неправильное имя столбца. Используйте AND e.id = 000663 вместо AND r.exam_id_fk = 000663, чтобы ваш запрос работал без WHERE.

SELECT COUNT(*)
FROM Responses r  
JOIN Exams E ON r.category_id_fk = E.id 
AND e.id = 000663
0 голосов
/ 14 октября 2011

Предполагая, что E.id является идентификатором exame, а r.exam_id_fk также является идентификатором экзамена. Try

select count(*)
from Exams e
left join Responses r on r.exam_id_fk = e.id
where e.id = 000663;

Похоже, вы присоединяетесь к идентификатору экзамена, равному идентификатору категории, и ваше условие должно быть в предложении where

...