当引用的 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
我有一个查询,它从不同的 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