PostgreSQL-有条件地从WHERE子句中排除语句

时间:2018-07-08 20:10:43

标签: sql postgresql plpgsql

我正在使用PL/pgSQL(PostgreSQL版本10 ),想知道是否有一种方法可以从WHERE子句中排除语句。

我的代码:

WHERE 
(
    e.priority >= priority_from AND
    e.priority <= priority_to
) AND
v.id = vocabulary_id_ AND
e.text LIKE '%' || search_phrase || '%'
;

如果参数vocabulary_id_的值为0null-查询返回0条记录,因为没有vocabulary的{​​{1}}等于{{ 1}}或Id

如果我使用0语句-我将最终有2个几乎相同的查询-一个带有null部分,另一个没有。

是否有一种简便的方法使用IF ELSE语法排除此部分?

1 个答案:

答案 0 :(得分:2)

您可以使用此

WHERE 
(
e.priority >= priority_from AND
e.priority <= priority_to
) And    (V.id = vocabulary_id_ or vocabulary_id_ is null or vocabulary_id_ = 0) and
e.text LIKE '%' || search_phrase || '%'
 ;

至少要添加(至少使用SQL Server),这很方便(至少使用SQL Server),但是这些类型的查询有时会导致性能欠佳。我不知道postgres是否就是这种情况。