【发布时间】:2015-03-20 00:38:29
【问题描述】:
我有下表,里面有一些学术小测验的答案记录:
回复
-SEMESTRE_ID(测验学期的外键)
-PERGUNTA_ID(测验问题的外键)
-DISCIPLINA_ID(被评估主题的外键)
-DOCENTE_ID(被评价教师的外键)
-QUIZ_ID(回答测验的每个人都有一个唯一的 quiz_id)
-TIPOAULA(类的类型,与此上下文无关)
-DATA(日期,与上下文无关)
-ID(答案的唯一 ID)
-RESPOSTA(答案的值,从 1 到 5)
因此,一个给定学期的测验有多个不同科目的问题,可以由人们评估(不一定需要对所有问题进行投票)。
我要实现的查询是:
id 21 学期测验每题至少5分的科目的id和缩写是什么?
我已经用计数策略解决了:
SELECT DISCIPLINA.DISCIPLINA_ID, SIGLA
FROM RESPOSTAS, DISCIPLINA
WHERE RESPOSTAS.DISCIPLINA_ID = DISCIPLINA.DISCIPLINA_ID AND SEMESTRE_ID = 21 AND RESPOSTA = 5
GROUP BY DISCIPLINA.DISCIPLINA_ID, SIGLA
HAVING COUNT(DISTINCT PERGUNTA_ID) = (SELECT COUNT(DISTINCT PERGUNTA_ID) FROM RESPOSTAS WHERE SEMESTRE_ID = 21);
但这是一个作业,我们也被要求使用双重否定策略来解决它,我似乎无法理解如何达到预期的结果。
【问题讨论】:
-
@JoelGregory 真实的故事,看到了,但不幸的是没有解决方案(至少使用双重否定)。看来任务还是一样的,我不是第一个遇到困难的人:)谢谢。
-
你能定义一下“双重否定策略”吗?这不是我以前听过的术语。你可以把
semestre_id = 21变成not( semestre_id != 21)——这是双重否定,但这可能不是你被要求的。 -
@JustinCave 我真的觉得很奇怪,Google 对此也不太了解 xD 它在查询中使用了两次
NOT IN。