Ajuda ao filtrar registros
14/10/2014
0
Trabalho em uma empresa, onde o cliente pode inserir observações nos pedidos
Existe uma tabela de cadastro de observações, onde há números que a identificam (1,2,3,...), então por exemplo o tipo de observação ENVIO é 1 e o tipo de observação ENTREGA é 5 e assim sucessivamente
Eu preciso saber quais pedidos não possuem nem um nem outro
A consulta que estou usando é
select pedido
from
pedidos a,observações b
where
a.codobservacao=b.codobservacao
and
b.tipo <> 1
and
b.tipo <> 5
A tabela de observações tem a seguinte estrutura
CODOBSERVACAO TIPO
Quando eu faço um pedido é gerado um número de código de observação e esse número é colocado na tabela de pedidos(aonde faço a junção no select) e também na tabela de observações
Por exemplo eu faço um pedido com os tipos de observação 1,2 e 5, ele será gravado assim no banco(eu tenho vários tipos de observação , só estou dando exemplo dessas 3)
TABELA PEDIDOS
PEDIDO CODOBSERVACAO
1000 500(número aleatório gerado na gravação do pedido)
TABELA OBSERVAÇÕES
CODIGO TIPO
1 1(ENVIO) -esses com código 1 são os cadastros
1 2(TESTE)
1 5(ENTREGA)
500 1
500 2
500 5
O problema que estou tendo é o seguinte, na minha consulta o pedido 1000 aparece, pois a observação do tipo 2 está levando ele para o resultado da consulta
Deve ser algo simples mas como sou inexperiente nessa área não estou conseguindo diagnosticar o erro
Preciso listar todos os pedidos que não tenham nem um nem outro, por mais que tenha outros tipos de observações pelo fato de ele ter o tipo de observação 1 ou 5 ele será excluido do resultado
Quem puder me ajudar eu agradeço desde já
Jorge Luiz
Post mais votado
16/10/2014
select a.pedido, b.tipo
from pedidos a
inner join observações b
on a.codobservacao = b.codobservacao
where a.pedido NOT IN (
select distinct a.pedido
from pedidos a
inner join observações b
on a.codobservacao = b.codobservacao
where b.tipo in (1,5)
)
Emerson Brito
Mais Posts
16/10/2014
Emerson Brito
Prezado, pelo que entendi vc. quer listar os pedidos que não tenham as observações 1,2 e 5 isso?
Se for isso, baseando no seu script ficaria assim:
select a.pedido, b.tipo
from pedidos a
inner join observações b
on a.codobservacao = b.codobservacao
where b.tipo not in (1,2,5)
Espero ter lhe ajudado!
16/10/2014
Jorge Luiz
Primeiramente agradeço sua ajuda
O que eu quero é pedidos que não tenham nem observação 1 nem a 5
Se eu fizer a consulta que você está me falando vai me aparecer pedidos que eu não quero, porque tem pedido que tem por exemplo a observação 1,2 e 5, e no NOT IN estou falando que não quero pedidos que tenham 1 e 5, mas ele entra no resultado pois a observação 2 leva ele
No meu banco fica gravado assim(vamos imaginar o pedido número 100 que tem 3 observações cadastradas nele)
Tabela Pedidos
PEDIDO CODOBSERVACAO
100 12345
Tabela Observações
CODOBSERVAÇÃO TIPO(é o que quero filtrar)
12345 1
12345 2
12345 5
Na consulta que você me passou eu digo que não quero nem o 1 e nem o 5, mas ele tem a observação 2 que faz ele entrar no resultado
Eu preciso fazer uma consulta que elimine o pedido do meu resultado se ele tiver a observação 1 ou 5, independente de outras observações que ele tenha
16/10/2014
Emerson Brito
Então só vc. tirar o 2 do NOT IN. Não resolve? Retornaria todos outros números exeto 1 e 5.
16/10/2014
Jorge Luiz
Na tabela de observações existem 3 linhas referente aquele código de observação(campo que eu uso para fazer o join entre as tabelas), uma com cada observação(1,2,5), ele descarta o 1 e 5 mas leva o pedido para o resultado pois tem um codigo de observação com a observação 2 vinculada
Eu precisaria que que ele descartasse o pedido caso ele tenha o tipo de observação 1 e 5, independente de outros tipos que estejam vinculados, só pelo fato de ter o 1 ou 5 ele some do meu resultado
É um pouco tenso kkk
16/10/2014
Emerson Brito
17/10/2014
Jorge Luiz
Muito obrigado mesmo! deu certo sim, era isso que precisava!
Abração
Clique aqui para fazer login e interagir na Comunidade :)