Это довольно простой вопрос, но по какой-то причине я не могу успокоить себя. У меня запрос sql, который я хочу обеспечить, действует, как я ожидаю.Правильно ли подключен этот SQL-запрос?
question_records
имеет внешний ключ для обоих enrollments
и questions
SELECT `question_records`.* FROM `question_records`
INNER JOIN `enrollments` ON `enrollments`.`id` = `question_records`.`enrollment_id`
INNER JOIN `questions` ON `questions`.`id` = `question_records`.`question_id`
WHERE (enrollments.id IN (10,20)
AND questions.id IN (500,600)
AND question_records.id not in (3000,4000))
То, что я хочу, чтобы убедиться в том, что я не буду получать запись вопрос с, например, в enrollment_id от 11 и question_id 500 Другими словами, относится ли это внутреннее соединение к этому, где пункт о записи по записи? Что еще более важно, делает это всегда лечить его так? (Я могу придумать с тестовым примером, но хочу, чтобы убедиться, что я не пропуская случай
Edit:. Дополнительные описательный для ясности:
Вполне возможно, что есть в базе данных с question_record
a enrollment_id
из 11 и question_id
из 500. Если этот запрос не искал условия записи по записи, он будет соответствовать на question_id
из 500 и вернуть запись. Это не то поведение, которое я хочу. хотят записи, для которых обаenrollment_id
иquestion_id
соответствуют данной записи. Ответы, которые я получил это состояние.
Чтобы кто-либо еще мог ответить на ваш вопрос, вам нужно очень четко объяснить, что вы ожидаете от запроса, чтобы вернуться. –
Для конкретной части нет, запрос никогда не вернет строку с «enrollment_id из 11 и question_id из 500». Единственными комбинациями '(enrollment_id, question_id)' являются '(10 500)', '(10,600)', '(20,500)' и '(20,600)' для этого запроса. –
@ypercube Hurgh, хороший улов. Я путаю 'IN' и' BETWEEN'. – millimoose