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

クエリが実行しているのは、テーブルにEXISTSの行が存在する場合にすべての質問番号を選択することです。行がある場合はすべての質問番号が選択され、ない場合は何も選択されません。あなたがする必要があるのは、それがそれぞれに依存するように、それを外部クエリと相関させることです...QuizQuestionsQUIZID6QuestionNmber

相関サブクエリにするためにAND QuestionNumber = qa.QuestionNumber、2番目の条件としてを入れる必要があります。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 

QuizID = 6 の QuizQuestions に何かがある場合。これに対する解決策については、Zane の回答を参照してください。SQL の実装によっては、通常、INNER JOIN バージョンを使用することをお勧めします。

于 2012-07-05T22:42:54.650 に答える