SQL - 仅在没有结果为null时返回

时间:2018-05-25 11:40:47

标签: sql sql-server

假设我有一项调查。用户回答问题,但如果他们愿意,他们可以跳过问题。

如果他们跳过它们,那么问题答案状态将保持为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

有人可以帮帮我吗?

谢谢!

1 个答案:

答案 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 - 这是来自主查询的相关值。

发布的数据库模型有点奇怪,因为答案没有与问题相关联,而是与整体调查相关联。