如何解决行构造函数比较
在简单的情况下:
SELECT (1,2) = (1,NULL)
-- NULL
比较时:
SELECT ((1,2),1) = ((1,CAST(NULL AS INT)),1)
-- NULL MariaDB/MySQL
-- False PostgreSQL
SELECT ((1,CAST(NULL AS INT)) = ((1,1)
-- NULL MariaDB/MySQL
-- False PostgreSQL
来自PostgreSQL文档:
=和情况与其他情况略有不同。如果两行的所有对应成员均为非null且相等,则认为两行相等; 如果任何对应的成员为非空且不相等,则行不相等;否则,行比较的结果未知(空)。
PostgreSQL对“嵌套”记录/行类型的处理方式不同吗?根据SQL Standard(MariaDB / PostgreSQL /两者),哪个结果正确?
解决方法
MySQL和Postgre将NULL值与sum
进行比较,其他所有内容未定义
请参阅https://www.postgresql.org/docs/9.1/functions-comparison.html
MySQL确实像标准sql定义的那样
但是正如您在Mysql和mariadb中所看到的,有一个比较NULL <=>
FooIn
| (1,2) <=> (1,NULL) | | -----------------: | | 0 |
IS
| ((1,2),1) <=> ((1,CAST(NULL AS INT)),1) | | --------------------------------------: | | 0 |
SELECT (1,NULL)
| ((1,NULL),1) | | -------------------------: | | 0 |
SELECT ((1,1)
| ((1,CAST(NULL AS INT)) <=> ((1,1) | | ------------------------------------------------------: | | 0 |
SELECT ((1,null) <=> ((1,null),1) | | ----------------------------: | | 0 |
db 提琴here
对于SELECT ((1,1)
我没有一个解释,以某种方式将SELECT ((1,1)
定义为0而不是NULL,但是我找不到任何解释,但是因为它是确定性的,所以应该在任何地方提及它,但我找不到它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。