0

我认为以下陈述会产生相同的结果……但事实并非如此。包含“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 语句中包含什么?

4

2 回答 2

2

您的查询所做的是在表中存在具有ofEXISTS的行时选择所有问题编号。如果有一行,它将选择所有问题编号,否则将选择无。您需要做的是使其与外部查询相关联,以便它依赖于每个...QuizQuestionsQUIZID6QuestionNmber

您需要将AND QuestionNumber = qa.QuestionNumber其作为第二个条件放入其中EXISTS以使其成为相关子查询。

于 2012-07-05T22:39:10.313 回答
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 版本通常是一个更好的主意。

于 2012-07-05T22:42:54.650 回答