“WHERE foo”和“WHERE foo IS TRUE”在 PostgreSQL 中是等价的吗?

亨利克·N

我从这些中得到相同的计数:

SELECT COUNT(*) FROM "users" WHERE admin
SELECT COUNT(*) FROM "users" WHERE admin IS TRUE

它们是等效的还是存在细微或不那么细微的差异?

是一种首选,也许是为了跨引擎兼容性?

IMSoP

如文档中所述,在处理 NULL 值方面存在细微差别

SELECT null::boolean -- null
SELECT null::boolean IS TRUE -- boolean false
SELECT null::boolean IS NOT TRUE -- boolean true

简而言之,IS语法总是返回一个布尔值,而不是传播 NULL。这不会对WHERE子句产生影响,因为NULL条件不包括行,但这是一个需要了解的重要区别。

除此之外,主要优点是显式:在复杂的 SQL 查询中,特定列是布尔值可能并不明显,因此添加IS TRUE会使意图更清晰。

来自没有布尔类型的系统的用户也可能本能地使用WHERE admin = TRUE(这NULL在产生差异的上下文中传播s)。该代码实际上无法移植到此类系统,因为它们无法识别“true”关键字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

BigQuery中的ARRAY_AGG(foo where bar)等价于什么?

将kwargs和kwargs ['foo']中的'foo'简化为True:

Postgresql:如何在使用 WHERE col NOT LIKE "foo" 時獲取空值?

Python中是否有等价的`(void)foo`?

Clojure中的:foo,:: foo,:: bar / foo和:bar / foo有什么区别?

bash中的“ FOO = myprogram”如何使C中的“ if(getent(“ FOO”)))返回true?

git分支“ foo”和“ foo / bar”不起作用吗?

有没有一种惯用的方法在Rails中执行where(params [:foo] ||'*')?

PostgreSQL 中的 WHERE 和 FILTER (WHERE) 有什么区别?

为什么`source foo && true`会退出bash中的脚本?

为什么ENV ['FOO'] = true在Ruby中引发异常?

为什么在bash中[“ $ foo” ==“ $ bar”]始终为true?

`foo()的yield和foo()中的x的区别:yield x`

js中“ foo.bar”和“ foo ['bar']”之间的区别

Bash 中的 `declare foo` 和 `foo=` 有什么区别?

Go中[] Foo(nil)和[] Foo {}之间的区别

java中foo(int)和foo(Integer)的区别

是foo吗?Foo与kotlin中的foo完全等同于foo吗?

PostgreSQL WHERE 和 null

如果foo为NULL,口才不会返回where('foo','!=','bar')的行

Qt中`:/ foo`,`qrc:/ foo`和`qrc:/// foo`路径之间的区别

python中装饰器中的foo=bar(foo)和something=bar(foo)有什么区别?

如果 foo else False 比 bool(foo) 快,为什么是 True?

如何搜索子字符串(WHERE列,如'%foo%')

C ++或C中的foo(void)和foo()之间有区别吗?

如何将lua表中的值格式化为:t = {[''foo'] = true,['bar'] = true}?

WHERE中的PostgreSQL动态条件

<%= foo%>和$ {foo}之间的区别

使用哪个:foo和foo: