No Postgres, usando o NamedParameterJdbcTemplate do Spring JDBC, se eu quiser excluir uma linha usando uma cláusula where que pode incluir um valor nulo, tenho que fazer algo assim...
val sql = if (someOtherValue == null) {
"delete from some_table where some_column = :someValue and some_other_column is null"
} else {
"delete from some_table where some_column = :someValue and some_other_column = :someOtherValue"
}
Se eu quiser fazer uma exclusão em massa de uma coleção de entradas onde alguns dos someOtherValue
s podem ser nulos, existe alguma maneira de fazer isso em uma única instrução SQL? Ou preciso dividir minha coleção em registros que contêm um nulo someOtherValue
e aqueles que não contêm?
Se você trocar
=
poris not distinct from
, você pode compararnull
muito bem:Isso permite que você passe um
null
in:someOtherValue
e isso irá corresponder a umnull
insome_other_column
.A comparação regular de igualdade
some_other_column = null
leva anull
um resultado mesmo que o operando da esquerda seja a,null
então sua cláusula where descarta/filtra esses valores. Enquanto isso,some_other_column is not distinct from null
gera um resultadotrue
se o operando da esquerda for,null
o que eu entendo ser o que você está tentando fazer: demonstração em db<>fiddledeveria funcionar