SQL 其中 ID 等于 ID 但可以为空

Mat*_*ght 1 sql where

我正在尝试从数据库中获取一些数据。我Taak有一个可能的idPartij列的表。可能,因为它可以是真实的idPartij,但也可以是null

我得到的查询:

SELECT T.idTaak,
       T.Taaktype,
       P.Partijnaam,
       T.Naar,
       T.UltimatumDatum,
       T.Opmerking,
       T.Status,
       T.Prioriteit
FROM Taak AS T,
     Partij AS P
WHERE T.idPartij = P.idPartij
ORDER BY idTaak DESC
Run Code Online (Sandbox Code Playgroud)

当我有一个 id 时T.idPartij,这工作正常,但如前所述,该 id 可以是null. 在这种情况下,该行将不会出现在结果中。

唯一的问题:当我删除 where 子句时,我得到了很多行(因为Partij表不再被过滤......

我对 SQL 完全是个菜鸟,所以我想不出“解决”这个问题的方法。我唯一能想到的是创建 2 个查询,但我认为这不是一个好方法...

Tim*_*ter 5

由于您正在尝试链接两个表,因此您应该使用 aLEFT OUTER JOIN来代替:

SELECT T.idTaak,
       T.Taaktype,
       P.Partijnaam,
       T.Naar,
       T.UltimatumDatum,
       T.Opmerking,
       T.Status,
       T.Prioriteit
FROM Taak AS T LEFT OUTER JOIN Partij AS P
   ON T.idPartij = P.idPartij
ORDER BY idTaak DESC
Run Code Online (Sandbox Code Playgroud)

如果您不想包含这些NULL值,请改用 an INNER JOIN

请注意,您不应该使用这些旧式连接,踢.


根据NULL问题:

你不能使用= NULLor<> NULL因为NULL不等于或不等于任何东西。NULL意味着未知。

所以使用IS NULLIS NOT NULL

WHERE T.idPartij IS NULL OR T.idPartij = P.idPartij
Run Code Online (Sandbox Code Playgroud)

来自MSDN

NULL 值表示该值未知。NULL 值不同于空值或零值。没有两个空值是相等的。两个空值之间或 NULL 与任何其他值之间的比较返回未知,因为每个 NULL 的值都是未知的。