[英]Not equal with null in inner join outputs different results
SELECT upper(unaccent(nome)), ouid, nome_dois, ouid_dois FROM clientes
INNER JOIN dblink('dbname=XXXXX.org','select upper(unaccent(nome)), ouid
FROM clientes') AS c(nome_dois varchar, ouid_dois varchar)
ON nome = nome_dois;
upper | ouid | nome_dois | ouid_dois
---------------------------------+--------------------------------------+---------------------------------+-----------
JOAO BAPTISTA | b9b1866a-3301-11e1-8cbb-82d9f077e206 | JOAO BAPTISTA |
OSVALDO DE ALMEIDA JOAO | 1cd643ba-1bb5-11e2-a232-66341e648f0f | OSVALDO DE ALMEIDA JOAO |
.........
SELECT upper(unaccent(nome)), ouid, nome_dois, ouid_dois FROM clientes
INNER JOIN dblink('dbname=XXXXX.org','select upper(unaccent(nome)), ouid
FROM clientes') AS c(nome_dois varchar, ouid_dois varchar)
ON nome = nome_dois
AND ouid::varchar != ouid_dois::varchar;
upper | ouid | nome_dois | ouid_dois
-------+------+-----------+-----------
(0 rows)
我的问题是关于AND ouid::varchar != ouid_dois::varchar
查询之间的唯一区别就是这个条件。 但是如果ouid_dois
为null,为什么xxxxxx != null
不起作用? 查询应输出相同的内容。
这些条件都是真的,对吧?
ouid ouid_dois
xxxxxx != null
ouid ouid_dois
xxxxxx != yyyyy
错误。 第一个条件总是错误的。 除了is NULL
,与NULL的任何比较都会产生NULL
值 - SQL将其解释为FALSE。
所以,以下都是假的:
NULL = NULL
NULL <> NULL
x = NULL
x <> NULL
NULL != NULL
返回false - 您需要调整WHERE
子句:
SELECT upper(unaccent(nome)), ouid, nome_dois, ouid_dois FROM clientes
INNER JOIN dblink('dbname=XXXXX.org','select upper(unaccent(nome)), ouid
FROM clientes') AS c(nome_dois varchar, ouid_dois varchar)
ON nome = nome_dois
AND (ouid::varchar IS NULL
OR ouid_dois::varchar IS NULL)
OR ouid::varchar != ouid_dois::varchar)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.