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

问题描述 投票:0回答:1

我有一个查询,其中一些参数有时可以到达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

我需要if参数的值:

“和i.emple = 126”< - 如果值为NULL,请忽略它,并带上所有记录,而不是通过iempleado过滤

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

谢谢。

postgresql
1个回答
1
投票

有两种方法可以实现这一目标

  1. 检查应用程序代码中的参数,并仅在value为非null时添加条件。
  2. 在值上添加OR条件以测试其可为空性。像这样的东西: and (? is null or i.empleado = ?) 在Java中,在这种情况下,您必须将参数应用两次。但是如果你使用的是Spring的NamedParameterJdbcTemplate,那么你可以只设置一次: and (:emp is null or i.empleado = :emp)
© www.soinside.com 2019 - 2024. All rights reserved.