Supondo que temos 4 campos booleanos a,b,c,d
Como podemos retornar qualquer um dos campos que são verdadeiros, mas não nada quando todos os 4 são verdadeiros?
where a=true or b=true or c=true or d=true
retornará uma linha onde até mesmo todos os 4 campos são definidos como verdadeiros. Como posso excluir esta linha da consulta?
O mesmo se aplica se o valor pesquisado forfalse
Você pode usar algo assim:
Que pode ser simplificado (sugerido por ypercubeᵀᴹ ) para:
Observe que ele não manipulará valores NULL corretamente. Se você quiser isso também, precisará usar
coalesce()
.Esta é uma tradução direta de "não quando todos os 4 são verdadeiros" em SQL:
Editar:
@a_horse_with_no_name encurtou ainda mais para
Edit2:
Isso não funciona corretamente (retornará uma linha quando todas as quatro colunas forem falsas), portanto, misture com a resposta de @a_horse_with_no_name:
Outra maneira de usar as funções agregadas do Postgres que pensei que funcionaria, mas na verdade não funciona!
(não tente isso):
Isso funcionará, mas é muito mais detalhado do que as outras respostas:
(um pouco simplificado):
Isso, no entanto, funciona. É baseado na
FALSE < TRUE
ordem:ou:
ou apenas: