【发布时间】:2014-03-31 13:42:19
【问题描述】:
使用postgres composite types,您基本上可以构建一个字段,其结构被定义为另一个表。我有一个名为“人”类型的“收件人”的复合字段。在我的特定场景中,此收件人字段通常为空。检查复合字段是否为空的正确方法是什么。我试过了:
select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null
在所有这些情况下,它都不会返回任何东西。那么如何正确检查复合值是否为空呢?
更新
经过更多阅读,看来这是我的问题:
人们可能认为
!(x IS NULL) = x IS NOT NULL在所有情况下都是正确的。但是有一个例外——复合类型。当一个复合值的一个字段是NULL,另一个字段是NOT NULL,那么这两个运算符的结果都是假的。IS NULL为真,仅当所有字段均为NULL时。IS NOT NULL为真,仅当所有字段均为NOT NULL时。对于介于两者之间的任何情况,两个运算符都返回 false。
我确实有一些为空的字段,而另一些则不是。我希望该字段将被视为 NOT NULL,如果复合字段中的任何项目不为空......而不是当所有项目都不为空时。除了检查每个字段之外,还有其他方法吗?
【问题讨论】:
标签: sql postgresql null composite