我发现自己写了以下内容:
select 'yes'
where exists(select * from foo where val=1)
and not exists(select * from foo where val<>1);
并想知道是否有更简洁的方法而不会牺牲太多的可读性。
我找到了一种我作为答案发布的方式,但我对此并不完全满意,并且会对替代方案非常感兴趣
在这种情况下val
是唯一的foo
- 没有重复
我发现自己写了以下内容:
select 'yes'
where exists(select * from foo where val=1)
and not exists(select * from foo where val<>1);
并想知道是否有更简洁的方法而不会牺牲太多的可读性。
我找到了一种我作为答案发布的方式,但我对此并不完全满意,并且会对替代方案非常感兴趣
在这种情况下val
是唯一的foo
- 没有重复
简洁、快速(尤其是多行),是我最喜欢的可读性,也适用于骗子:
返回
TRUE
/FALSE
.. 或NULL
-仅在只有一行带有 的情况下val IS NULL
,因为count()
从不返回NULL
或没有行。由于您的示例,示例中的第二个
1
恰好与第一个相同。问题中的查询因
NULL
值而失败。考虑一个简单的演示:IS DISTINCT FROM
会解决这个问题,但它仍然可能因重复而失败val
- 你已经排除了这种情况。你的回答很好。
返回
'yes'
/无行。不过,我更喜欢这种较短的形式。不要忘记 PostgreSQL(不像 Oracle)有一个正确的
boolean
type。返回
TRUE
// 。FALSE
_NULL
@Erwin 答案的变体。完全没有
COUNT()
,只有MIN()
和MAX()
。使用大表和(不是您的情况)重复可能会更有效val
:这个返回
true
,false
或者一个空的结果: