Я думаю, что должен как-то это знать, особенно после прочтения множества вопросов и ответов, касающихся «Условие должно входить в предложение ON, а не в предложение WHERE».Тем не менее, я все еще потерялся.
У меня есть три таблицы, и я обычно соединяю их с помощью соединений LEFT (OUTER).Объединенные таблицы выглядят так (стандарт Retty):
task_id task_questions_taskId taskQuestions_questionId question_id
1 1 5 5
1 1 8 8
2 2 8 8
SELECT `t`.`id` AS `task_id` ,
`task_questions`.`taskId` AS `task_questions_taskId` ,
`task_questions`.`questionId` AS `task_questions_questionId` ,
questions.id AS question_id
FROM `task` `t`
LEFT OUTER JOIN `task_questions` `task_questions`
ON ( `task_questions`.`taskId` = `t`.`id` )
LEFT OUTER JOIN `question` `questions`
ON ( `task_questions`.`questionId` = `questions`.`id` )
Это стандартный запрос для получения всех записей.(Это взято из Yii; я действительно хочу сделать это с помощью Active Record, но не могу даже получить правильный SQL).
И теперь я хочу получить ТОЛЬКО те задачи, которые имеют question_id 2 И 8 (например) Так что, если у задачи нет обоих этих question.ids, я не хочу этого в наборе результатов.В этом случае у задачи могут быть и другие question_ids.Хотя было бы интересно посмотреть, как будет выглядеть запрос, если он будет возвращать только те, которые имеют именно эти 2 (или любой другой набор).Легко получить все задачи, в которых есть один вопрос, с WHERE question.id = 2, но оператор AND в предложении WHERE приводит к пустому результату.