转换我的内连接sql语句EXISTS

时间:2012-07-05 22:37:34

标签: sql

我认为以下陈述会产生相同的结果......但他们没有。包含'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声明中包含哪些内容?

2 个答案:

答案 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版本。