Normalmente, se as condições não forem exigidas em nossas instruções de consulta, não usamos uma WHERE
cláusula. Mas eu vi uma WHERE 1
cláusula sendo usada em muitos lugares, mesmo onde outras condições não estão presentes.
- Por que isso é feito?
- Existem benefícios específicos para o tempo de execução?
- Permite outras funcionalidades?
- O uso é
WHERE 1=1
semelhante a isso?
Basicamente, é apenas para conveniência do programador, pois você pode adicionar condições adicionais
AND...
depois disso e não tem impacto no tempo de execução.Confira estes links para o Stackoverflow:
Observe que
WHERE 1
é idêntico aWHERE 1=1
; ambos significam,WHERE TRUE
mas o primeiro é rejeitado por muitos sistemas de gerenciamento de banco de dados como não sendo realmente booleano.Meu principal uso é que torna mais fácil comentar coisas durante o desenvolvimento de consultas. Eu lidero com
,
's eand
's:Também torna mais fácil colocar as coisas programaticamente até o fim.
Caso contrário, você teria que qualificar a primeira opção... e fazer com que cada opção a seguir verificasse as opções anteriores. E se o usuário escolher apenas a Opção D no exemplo anterior? Você teria que se certificar de que
if A, B and C aren't chosen
, em seguida, useWHERE
else useand
. Com=
no início, você pode simplesmente colocar os qualificadores no final da declaração.A geração de código dinâmico escrito por programadores não muito competentes me vem à mente.
Gera SELECT.... WHERE e então você tem que ter ALGO.... então ao invés de adicionar o WHERE apenas quando necessário, eles adicionam uma condição não limitante quando não há nenhum. Visto que - responsável por demitir o "especialista".
Ou o cara só coisas ONDE é obrigatório ;)
Qualquer outra coisa eu não consigo ver.
Eu estava programando um monte de funções definidas pelo usuário em C++/C para PostgreSQL que eram usadas por outras pessoas em uma grande empresa (mais de 10 mil pessoas). Minhas funções têm um parâmetro opcional
where
: se nenhum valor foi fornecido, a cláusula não foi usada. Isso foi explicitamente documentado. Infelizmente, ninguém usou esse recurso e todos estavam apenas fornecendowhere 1=1
cláusula. Teoricamente, isso parece imprudente, praticamente todos os otimizadores de consulta descartam esse tipo de declaração. E é difícil educar 10 mil pessoas.O uso de "where 1=1" reduz a complexidade do código necessário na geração da cláusula 'where' do SQL dinâmico. Caso contrário, ao criar a cláusula 'where' você precisaria verificar se este é o primeiro componente para cada componente adicionado. Este é um padrão de código simples para reduzir a complexidade do código e reduzir a complexidade do código, sempre que possível, é quase sempre a decisão certa.
Aqui está... do ponto de vista da programação um uso de 1=1...
Em uma situação como essa quando eu preciso construir uma consulta em tempo de execução e ela pode ser curta ou longa, eu uso 'where 1=1 AND'
Facilite as coisas