2013-06-13 2 views
0

Может ли кто-нибудь мне помочь. У меня есть следующий запрос 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, так как иногда я имею нулевые значения, которые хотят обрабатывать как разные значения.

Пожалуйста, помогите мне.

ответ

1

a is not distinct from b составляет письма:

a = b or a is null and b is null 

Предположительно, у Вас есть строки, где b.datetime и a.time являются как нулевой.

(Я бы добавил примечание об использовании индекса. Это могло измениться с момента последнего проверки, но в течение 9.1 дней отличается от того, что оно не было расширено, а скорее рассматривается как оператор в своем собственном праве. Это помешало ему полностью использовать индексы.)

+0

Ни одно из этих полей не равно нулю. Значит, должно работать то же самое? – robert

+0

Попытайтесь идентифицировать оскорбительные строки, например. 'select * from ... где b.datetime не отличается от a.time :: timestamp с часовым поясом, а не ((b.datetime = a.time :: timestamp с часовым поясом) истинно)' –

+1

@robert: комментарий _None из этих полей null_, кажется, противоречит вопросу _I иногда имеют нулевые значения –

Смежные вопросы