我认为以下陈述会产生相同的结果......但他们没有。包含'exists'语句的第一个代码似乎并没有通过'QuizID'列来限制所选值我认为它应该......作为旁注,此列仅存在于'quizQuestions'中但不存在于'quizAnswers'中
SELECT qa.QuestionNumber
FROM QuizAnswers qa
where exists (SELECT *
FROM QuizQuestions
WHERE QUIZID = 6)
SELECT qa.QuestionNumber
FROM QuizAnswers qa
INNER JOIN QuizQuestions IQQ
ON qa.QuestionNumber = IQQ.QuestionNumber
WHERE QUIZID = 6
包含'内连接'的语句包含我想要的结果集。 为了获得相同的结果,我需要在我的Exists声明中包含哪些内容?
答案 0 :(得分:2)
当EXISTS
表中存在QuizQuestions
QUIZID
6
的行时,QuestionNmber
查询正在执行的操作是选择所有问题编号。如果有一行,它将选择所有问题编号,否则,它将选择无。您需要做的是使其与外部查询 相关 ,以便它依赖于每个AND QuestionNumber = qa.QuestionNumber
...
您需要将EXISTS
作为{{1}}中的第二个条件,以使其成为相关子查询。
答案 1 :(得分:2)
此查询
SELECT qa.QuestionNumber FROM QuizAnswers qa where exists ( SELECT * FROM QuizQuestions WHERE QUIZID = 6)
等同于此
SELECT qa.QuestionNumber FROM QuizAnswers qa
如果QuizQuestions中存在QuizID = 6的任何内容,请参阅Zane对此解决方案的回答,具体取决于您的SQL实现,无论如何都更适合使用INNER JOIN版本。