【问题标题】:IS NOT DISTINCT FROM versus =与 vs 没有区别
【发布时间】:2013-06-09 16:13:09
【问题描述】:

谁能帮帮我。我有以下 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 IS NOT DISTINCT FROM a.time::timestamp with time zone 替换b.datetime = a.time::timestamp with time zone,那么它不再产生0。这是为什么呢?我需要使用IS NOT DISTINCT FROM 版本,因为有时我有空值,想将其视为不同的值。

请帮帮我。

【问题讨论】:

    标签: postgresql postgis postgresql-9.1


    【解决方案1】:

    a is not distinct from b相当于写:

    a = b or a is null and b is null
    

    大概,你有 b.datetime 和 a.time 都为空的行。

    (我要添加一个关于索引使用的注释。自从我上次检查以来,这可能已经改变了,但是在 9.1 天,它与未扩展不同,而是本身被视为一个运算符。这个阻止它完全使用索引。)

    【讨论】:

    • 这些字段都不是空的。所以它应该可以正常工作吗?
    • 尝试找出有问题的行,例如select * from ... where b.datetime is not distinct from a.time::timestamp with time zone and not((b.datetime = a.time::timestamp with time zone) is true)
    • @robert:评论 None of these fields are null 似乎与问题的 我有时有 null 值相矛盾
    • @DanielVérité:对不起,我的意思是在这种特定情况下,违规行没有空值。但是,一般来说,我可能有空值。
    猜你喜欢
    • 2011-05-23
    • 2015-06-05
    • 2014-07-01
    • 2021-07-16
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多