我有两张表,一张是问题,一张是答案。 questions 模式由 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
Here's the sql-fiddle对于所有模块 ID,结果为:
- 模块 ID = 1 => 1
- 模块 ID = 2 => 1
- 模块 ID = 3 => 0
关于Sql:查找答案是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412967/