【发布时间】:2013-02-09 00:22:03
【问题描述】:
这是一个非常基本的问题,但出于某种原因,我无法让自己放心。我有一个 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 子句记录依据?更重要的是,它总是这样对待它吗? (我可以提出一个测试示例,但要确保我没有遗漏任何案例。
编辑:为清楚起见附加说明:
数据库中可能存在question_record,enrollment_id 为 11,question_id 为 500。如果此查询不是逐个记录搜索条件,它将匹配在 500 的 question_id 上并返回记录。这不是我想要的行为。我只想要 both 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 也许 OP 也有同样的困惑。否则
11的问题没有多大意义。 -
@ypercube 这就是我所需要的。只是想确保我没有遗漏一些微妙的东西。
标签: sql inner-join