我有两张桌子,一张是问题,一张是答案。问题模式由questionid,question,module id组成。一个moduleid可能有很多问题。

Questionid   Question    Moduleid(FK)
--------     -----       -------
1            q1             1
2            q2             1
3            q4             2
4            q5             2

答案模式由3列组成
answerid     Answer    questionid(FK)
--------     -----       -------
1            a1             1
2            a2             2
3            a4             3
4            a5             4

我正在尝试构造一个存储过程,我将把tblquestions的@moduleid作为参数发送给我,并且如果要在tblquestions中回答所有特定moduleid的问题,我希望它返回“1”。 (一个问题在tblanswers中只有一个答案),或者如果没有回答所有问题,则返回0。对如何使这种方法有帮助吗?

最佳答案

也许有一些更简单的方法,但是它应该起作用,并且可以轻松地对其进行修改,以返回所有已回答/未回答的模块或模块缺少的答案等。

SELECT CASE
     WHEN EXISTS (SELECT 1
                  FROM   tblquestions AS q
                         INNER JOIN tblanswers AS a
                                 ON q.questionid = a.questionid
                  WHERE  ( q.moduleid = @ModuleId )
                         AND ( NOT EXISTS (SELECT 1
                                           FROM   tblquestions AS q
                                                  LEFT OUTER JOIN
                                                  tblanswers AS a
                                                               ON
                                                  q.questionid =
                                                  a.questionid
                                           WHERE  ( q.moduleid = @ModuleId )
                                                  AND ( a.answerid IS NULL )
                                          ) ))
   THEN 1  ELSE 0
   END  AS AllQuestionsAnswered

带有所有模块ID的Here's the sql-fiddle,结果为:
  • ModuleID = 1 => 1
  • ModuleID = 2 => 1
  • ModuleID = 3 => 0
  • 10-06 05:36