任何人都可以帮助我。我有以下postgresql查询:
SELECT count(*) FROM trackPointsA
WHERE gid NOT IN (
SELECT a.gid
FROM trackPointsA a, trackPointsB b
WHERE a.the_geom = b.the_geom
AND b.datetime = a.time::timestamp with time zone
GROUP BY a.gid ORDER BY a.gid
)
此查询产生0,这是正确的。但是,如果我将b.datetime = a.time::timestamp with time zone
替换为b.datetime IS NOT DISTINCT FROM a.time::timestamp with time zone
,则它不再产生0.为什么会这样?我需要使用IS NOT DISTINCT FROM
版本,因为我有时会将null值视为不同的值。
请帮帮我。
答案 0 :(得分:1)
a is not distinct from b
相当于写作:
a = b or a is null and b is null
据推测,你有b.datetime和a.time都为空的行。
(我会添加一个关于索引使用情况的说明。自上次检查以来,这可能已经发生了变化,但在9.1天之后,与未扩展有所不同,而是将其视为一个独立的运营商。阻止它完全使用索引。)