如果参数为null,请选择所有记录。 Postgres的

时间:2017-12-16 10:40:06

标签: postgresql

我有一个查询,其中一些参数有时可以到达null,当这些参数到达null时,我希望它们忽略这些条件。

SELECT DISTINCT on (i.empleado) i.id
FROM rrhh.imputacion as i 
  INNER JOIN rrhh.empleado as e ON e.id = i.empleado 
  JOIN commons.persona AS pe ON e.persona_comun = pe.id 
  INNER JOIN rrhh.parte__imputaciones as pi ON pi.imputacion = i.id 
  INNER JOIN rrhh.parte as p ON pi.parte = p.id 
  WHERE i.dia >= '2017-12-04' AND i.dia <= '2017-12-11' and p.borrador = false  AND e.fecha_fin_contrato IS NULL AND e.security_domain_id = 2 
  and i.empleado = 126
ORDER  BY i.empleado, i.dia DESC,i.id

我需要参数的值:

&#34;和iempleado = 126&#34; &lt; - 如果值为NULL,则忽略它,并带来所有记录,而不用iempleado

过滤

我没有看到postgres的具体例子。

谢谢。

1 个答案:

答案 0 :(得分:1)

实现此目的有两种方法

  1. 检查应用程序代码中的参数,并仅在值为非空时添加条件。
  2. 在值上添加OR条件以测试其可为空性。像这样:

    and (? is null or i.empleado = ?)
    

    在Java中,在这种情况下,您必须将参数应用两次。 但是,如果您使用的是Spring NamedParameterJdbcTemplate,那么您只需设置一次即可:

    and (:emp is null or i.empleado = :emp)