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与?