Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lu4n

Retornando usuario daquela unidade

Recommended Posts

Bom Dia Galera,

tenho um select pra exibir pacientes em tratamento, está desta maneira...

SELECT c.*
FROM controle c
LEFT JOIN paciente p ON (c.id_paciente = p.id_paciente)
WHERE (c.id_situacao = 1
AND c.dt_final >= DATE(NOW())
AND NOT EXISTS (SELECT NULL FROM controle_paciente cp WHERE cp.id_controle = c.id_controle AND DATE(cp.dt_sistema) = DATE(NOW())))

só que tem pacientes separados por unidades, e alguns usuarios tbm, tipo

 

Paciente = 1 Unidade = 1

Paciente = 2 Unidade = 1

Paciente = 3 Unidade = 2

 

Usuario = 1 Unidade = 1

Usuario = 2 Unidade = 2

Usuario = 3 Unidade = NULL

 

o usuario 3 pode ver todos pacientes, como seria no sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente algo assim

... and ( (Usuario.Unidade = NULL) or (Usuario.Unidade = Paciente.Unidade) ) ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Particularmente, eu evitaria usar OR.

Faria com UNION, por conta de aproveitamento de índices (logo, melhor performance).

SELECT p.* FROM Paciente WHERE Paciente.CodUnidade IS NULL
UNION
SELECT p.* FROM Paciente, Unidade WHERE Paciente.CodUnidade = Unidade.CodUnidade

@motta

Só uma pequena correção: no caso de NULL, o correto é

... Usuario.Unidade IS NULL

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

@hufersil , 110% certo no is null !!!

 

Quanto a sua solução não estaria certo se o UNION é melhor que o OR , só testando.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.