Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal, tudo bem com vocês?
Seguinte, estou fazendo uma consulta em duas tabelas, onde preciso que seja respeitadas algumas condições com o operador "OR". O problema é que basta eu colocar a condição que o meu resultado sai errado dêem uma olhada:
select nome,tipo,status,statusChaves,id,equ_id,status,emp_id_equ
from equipamentos AS equ
LEFT JOIN ocorrencias as oco ON oco.equipamento_id = equ.equ_id
where atende IN (1)
and emp_id_equ IN (13)
AND equ_statusChaves = 0
OR status_autho = 0
OR status = 2
Se eu não coloco estas duas condições com o OR o resultado toma o efeito que preciso vindo os equipamentos e suas ocorrências só que somente com o status das chaves e preciso também dos equipamentos que tiverem estes dois status com a condições utilizando o OR
Será que tenho que fazer isto com uma subcomsulta ou fazer consultas separadas?
Abraços e valeu obrigado pela ajuda! :D
Opa sim Motta, agradeço ajuda e por favor não entenda que estou criticando seu código. :)
Mas temos uma diferença, que é o que esta me complicando.
Em seu exemplo o OR se aplica a uma variação da primeira condição, ou seja podem existir dois "tipos" diferentes. Em meu caso não há esta.
São três colunas diferentes que será aplicado o OR:
AND equ_statusChaves = 0
OR status_autho = 0
OR status = 2
tente
where (atende IN (1) and emp_id_equ IN (13) AND equ_statusChaves = 0)
OR (status_autho = 0)
OR (status = 2)
mas não sei se a regra é esta que eu montei.
Opa Valeu Motta, consegui! :joia:
...
where (
engaged IN (1)
AND emp_id_equ IN (13)
AND (equ_statusChaves = 0)
) OR (
engaged IN (1)
AND emp_id_equ IN (13)
AND status_autho = 0
) OR (
engaged IN (1)
AND emp_id_equ IN (13)
AND status = 2
)
Quando usar AND e OR separe as cláusulas por paranteses para tornar mais clara o WHERE e ter certeza de seu resultado
Membros com mais 1 ano ou Moderadores
errado
where tipo = 'membro' and data >= '24/10/2010' or tipo = 'moderador'
correto
where ((tipo = 'membro' and data >= '24/10/2010') or (tipo = 'moderador'))