我有两张桌子,一张是问题,一张是答案。问题模式由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,结果为: