Select Específico - SQL

19/02/2015

0

Olá amigos, tenho um select que faz um join com uma tabela de histórico.
Essa tabela tem várias linhas devido a mudança de status.
Preciso que se uma das linhas seja igual a cancelado, não retorne nada.
Fiz o select abaixo, mas ele retorna as demais linhas quando coloco o status <> 'Cancelado'. Nesse caso, não deve retornar nada.

SELECT H.codigo FROM ESPELHO E
inner join HISTORICO H on H.codigo = E.codigo
where E.cod_espelho = 10 AND H.status <> 'Cancelado'

Desde já, agradeço a ajuda.
Alex Fonseca

Alex Fonseca

Responder

Post mais votado

19/02/2015

no lugar de inner join utilize left join

a comparação tambem pode ser feita com not in (campo) o inner traz tudo ..

Isaac Jose

Isaac Jose
Responder

Mais Posts

19/02/2015

Alex Fonseca

Amigo ainda não funcionou, se uma das linhas tiver o status = Cancelado, nao pode trazer nada.

As outras linhas tambem não podem aparecer, se em uma das linhas o status estiver como Cancelado.
Responder

19/02/2015

Isaac Jose

SELECT E.codigo,h.codigo,e.cod_espelho,h.status, FROM ESPELHO E
left join HISTORICO H on H.codigo = E.codigo
where E.cod_espelho = 10 AND H.status not in 'Cancelado'

rode esse codigo e poste o resultado pra eu ver o que pode estar acontecendo.
Responder

19/02/2015

Alex Fonseca

Segue o resultado amigo:

codigo codigo cod_espelho COD_STATUS_PROCESSO
-------------------- -------------------- -------------------- -------------------
864277 864277 864277 29

(1 linha(s) afetadas)

Tive que trocar o finalzinho do select que vc mandou, ao invés de: H.status not in 'Cancelado' ---> coloquei H.status <> 30

30 = Cancelado
29 = Em Andamento

Se em uma das linhas tiver 30, nao pode trazer nada, porque se o espelho foi cancelado, ele não pode aparecer e a única tabela que grava o Status de Cancelado é a tabela de HISTORICO.

ps.muito obrigado por estar me ajudado ainda :)
Responder

19/02/2015

Isaac Jose

cara esta correto o resultado veio o 29 que é o que esta em andamento..
e vc nao precisa fazer isso coloca status = 29
e pode ir postando se souber ajudo..ou tento rsr
Responder

19/02/2015

Alex Fonseca

Entao, mas estou criando um relatório que deve mostrar apenas os espelhos que não foram cancelados e se eu coloco o "select" daquela maneira, ele traz uma linha, aí mesmo estando cancelado aparece no relatório.

Na verdade, preciso de um "select" que se em uma das linhas de um espelho estiver o "status = 30", não apareca nada... mas nao sei como fazer :(
Responder

19/02/2015

Isaac Jose

amigo o seu select esta correto. vc esta forçando o campo status para 29. se esta trazando quem esta com cancelado deve haver alguem errado na tabela
posta um top 10 de cada tabela
Responder

19/02/2015

Isaac Jose

amigo o seu select esta correto. vc esta forçando o campo status para 29. se esta trazando quem esta com cancelado deve haver alguem errado na tabela
posta um top 10 de cada tabela
Responder

19/02/2015

Alex Fonseca

O erro estava em uma das tabelas mesmo, obrigado amigo!!! :)
Responder

19/02/2015

Isaac Jose

por nada.. precisando e só falar. coloca resolvido neste poste pra que o pessoal não perca tempo entrando e vendo se ainda precisa de ajuda..

abraços .
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar