Null,包括使用单个占位符在Postgresql中搜索
有桌子Null,包括使用单个占位符在Postgresql中搜索,sql,postgresql,jdbc,where-clause,sql-null,Sql,Postgresql,Jdbc,Where Clause,Sql Null,有桌子 创建表t(x int) 插入到t值中(空)、(0)、(42) 并使用两个占位符进行查询: 从t中选择x,其中x=?或者x为NULL,并且?是空的 逻辑如下:如果我用42解析这些占位符,它将返回42。如果我用null解析它们,它将返回null。换句话说,它是一个包含搜索的空值 问题是: 是否可以将此查询(在Postgresql中)重写为只有一个占位符而不是两个占位符?Postgres通过实现空安全相等,这正是您所要求的 因此: Postgres通过实现空安全相等,这正是您所要求的 因此
创建表t(x int)
插入到t值中(空)、(0)、(42)
并使用两个占位符进行查询:
从t中选择x,其中x=?或者x为NULL,并且?是空的
逻辑如下:如果我用42
解析这些占位符,它将返回42
。如果我用null
解析它们,它将返回null
。换句话说,它是一个包含搜索的空值
问题是:
是否可以将此查询(在Postgresql中)重写为只有一个占位符而不是两个占位符?Postgres通过实现空安全相等,这正是您所要求的 因此:
Postgres通过实现空安全相等,这正是您所要求的 因此:
对。您可以使用与不同的
,并且只能使用一个占位符:
where x is not distinct from ?
不同于
/不同于
是空
-安全的比较运算符,将空
视为用于比较的“真实”值(例如,因此空=空
)是。您可以使用与
不同的,并且只能使用一个占位符:
where x is not distinct from ?
不同于
/不同于
是null
-安全的比较运算符,将null
视为用于比较的“真实”值(例如null=null
)PostgreSQL中参数的占位符是$1
,$2
,让您使用?
是一些驱动程序为了方便而实现的,但它们提供的灵活性较差
使用实数表示法,可以指定一个参数出现在多个位置:
SELECT x FROM t WHERE x = $1 OR x IS NULL AND $1 IS NULL
它的优势在于它可以使用索引。PostgreSQL中参数的占位符是$1
,$2
,等等。让您使用?
是一些驱动程序为了方便而实现的,但它们提供的灵活性较低
使用实数表示法,可以指定一个参数出现在多个位置:
SELECT x FROM t WHERE x = $1 OR x IS NULL AND $1 IS NULL
它的优势在于它可以使用索引。x与?
x与?