在where子句中使用错误的NULL运算符执行查询

时间:2014-02-28 14:37:12

标签: postgresql null where-clause

我想知道在运行SQL时到底发生了什么:

UPDATE pgbench_accounts
SET filler = 'test'
WHERE aid = NULL;

在这种情况下,PostgreSQL会进行seq扫描吗?解释分析因PostgreSQL版本而异。 在9.3看起来像:

"Update on pgbench_accounts  (cost=0.00..6266.00 rows=1 width=26) (actual time=0.002..0.002 rows=0 loops=1)"
"  ->  Result  (cost=0.00..6266.00 rows=1 width=26) (actual time=0.000..0.000 rows=0 loops=1)"
"        One-Time Filter: NULL::boolean"
"        ->  Seq Scan on pgbench_accounts  (cost=0.00..6266.00 rows=1 width=26) (never executed)"

但是在之前的版本中缺少“(从未执行过)”,如果运算符错误,PostgreSQL是否足够聪明,不能执行扫描?

1 个答案:

答案 0 :(得分:0)

如果您希望它在参数为空时更新所有行

update pgbench_accounts
set filler = 'test'
where aid = :parameter or :parameter is null;

如果您想要的是将null视为共同值

update pgbench_accounts
set filler = 'test'
where aid is not distinct from :parameter;