我从这些中得到相同的计数:
SELECT COUNT(*) FROM "users" WHERE admin
SELECT COUNT(*) FROM "users" WHERE admin IS TRUE
它们是等效的还是存在细微或不那么细微的差异?
是一种首选,也许是为了跨引擎兼容性?
如文档中所述,在处理 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] 删除。
我来说两句