当引用的 table 可以为空时,如何过滤 SQL 结果?

How to filter SQL results when the referenced table can be empty?

我有一个查询,它从不同的 table 中进行选择,然后使用 WHERE 子句来过滤项目。 该子句如下所示:

WHERE allItems.NumID != (SELECT RelatedNumID FROM allRelated WHERE NumID = allItems.NumID)

这在 allRelated table 不为空时工作正常。 但是当它为空时,我从查询中得到 0 个结果。

我尝试使用 NOT IN 而不是 !=。当 allRelated 为空时它 returns 结果,但当 allRelated 不为空时不过滤结果:

WHERE allItems.NumID NOT IN (SELECT RelatedNumID FROM allRelated WHERE NumID = allItems.NumID)

我也尝试加入 tables,但得到的结果与 NOT IN:

相同
LEFT JOIN allRelated ON allItems.NumID = allRelated.NumID
WHERE allRelated.NumID IS NOT NULL

我应该如何编写查询以便它适用于空和非空 allRelated table?

P.S。我正在使用 SQLite。

试试 NOT EXISTS:

WHERE NOT EXISTS (
  SELECT 1 
  FROM allRelated 
  WHERE allRelated.NumID = allItems.NumID
    AND allRelated.RelatedNumID = allItems.NumID
) 

或者,将 LEFT 连接的 WHERE 子句中的条件更改为 IS NULL:

LEFT JOIN allRelated 
ON allItems.NumID = allRelated.NumID AND allRelated.RelatedNumID = allItems.NumID
WHERE allRelated.NumID IS NULL