これはかなり基本的な質問ですが、何らかの理由で自分自身を安心させることができません。期待どおりに動作することを確認したい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 の質問レコードを取得しないことです。つまり、この内部結合は、この where 句をレコードごとに処理しますか? さらに重要なことに、常にそのように扱っていますか? (テスト例を考え出すことはできますが、ケースを見逃していないことを確認したい.
編集:明確にするための追加の物語:
11 の と 500 の がquestion_record
データベースに存在する可能性があります。このクエリがレコードごとに条件を検索していない場合、500 の に一致し、レコードを返します。これは私が望む動作ではありません。特定のレコードに対してとの両方が一致するレコードのみが必要です。私が得た答えは、この状態をカバーしています。enrollment_id
question_id
question_id
enrollment_id
question_id