假设我有一项调查。用户回答问题,但如果他们愿意,他们可以跳过问题。
如果他们跳过它们,那么问题答案状态将保持为NULL。
有很多不同的调查,所有调查都有不同的问题。
现在,我需要选择回答所有问题的用户。如果答案状态中只有一个问题为NULL,那么我就不会给他回复。
调查以及问题都是用PHP生成的。它们不是通过任何类型的SQL
创建的我的数据库如下所示:
USER( idUser ,姓名)
答案( #idSurvey , #idUser )
调查( idSurvey ,姓名, #idQuestion )
问题( idQuestion ,问题,状态)
记住它只是一个接近我案例的例子。这个数据库根本没有优化,情况有点奇怪。请不要介意。
所以,我试过这样的事情:
SELECT
name
FROM
USER U, ANSWER A, SURVEY S
WHERE
U.idUser = A.idUser
AND
A.idSurvey = S.idSurvey
AND
S.idSurvey = 1
AND
S.idQuestion IN
(
SELECT
idQuestion
FROM
QUESTION Q, SURVEY S
WHERE
Q.idQuestion = S.idQuestion
AND
S.idSurvey = 1
AND
Q.status is not null
);
当然,在这里,SQL会返回每个回答至少一个调查问题的用户。
我正在使用SQL-Server
有人可以帮帮我吗?
谢谢!
答案 0 :(得分:0)
您希望排除相反的情况,您已将问题写为
仅在所有结果都不为空时返回
可以改为:
仅在没有结果为空时返回
然后使它变得更简单,并引导你在where子句中加入类似的东西
WHERE NOT EXISTS (select 1
from question q
inner join survey s on q.idQuestion = s.idQuestion
inner join answer a on a.idsurvery = q.survey
where s.idSurvey = 1
and a.idUser = U.idUser
and q.status is null
)
需要注意的是a.idUser = U.idUser - 这是来自主查询的相关值。
发布的数据库模型有点奇怪,因为答案没有与问题相关联,而是与整体调查相关联。