Ir para conteúdo

Arquivado

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

Waister Marques

[Resolvido] Clausula OR - FIREBIRD

Recommended Posts

Tudo bem pessoal?

Estou com uma dificuldade que é a seguinte, fiz um select para trazer meus pedidos de venda e tenho varias cidades, então a primeira coisa que fiz foi pedir para trazer so as vendas que não estão dentro de mapas de entrega, depois as que não estão canceladas, depois as que não são de determinadas cidades até aqui tudo bem, mas por ultimo pedi para trazer apenas as vendas de algumas cidades "where v1.cidade in ('1','2','21','41')" que foram feitas no dia de hoje "V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)" porque as vendas feitas para essas cidades em outros dias não importa nessa consulta, para isso usei a clausula OR, mas com ela ou sem ela o firebird retorna o mesmo resultado que traz as vendas das cidades "where v1.cidade in ('1','2','21','41') independente do dia que foram feitas, não respeitando que eu quero apenas as vendas de hoje das determinadas cidades, trazendo

 

select * from venda v
where V.MAPADEENTREGA IS NULL
and v.cancelado is null
and v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
or v.venda in
(select v1.venda
from venda v1
where v1.cidade in ('1','2','21','41') and
V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))

 

Alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando usar AND e OR na mesma sentença separa com parênteses a precedência que quer para sua regra.

 

Pode ser isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando usar AND e OR na mesma sentença separa com parênteses a precedência que quer para sua regra.

 

Pode ser isto.

Tentei com os parenteses para informar ao firebird a precendendia mas o resultado retorndado é o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando usar AND e OR na mesma sentença separa com parênteses a precedência que quer para sua regra.

 

Pode ser isto.

Tentei com os parenteses para informar ao firebird a precendendia mas o resultado retorndado é o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * 
from venda v
where V.MAPADEENTREGA IS NULL
and v.cancelado is null
and (
    v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
    or 
    v.venda in (
                select v1.venda
                from venda v1
                where v1.cidade in ('1','2','21','41') 
                and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)
                )

 

Seria isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * 
from venda v
where V.MAPADEENTREGA IS NULL
and v.cancelado is null
and (
    v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
    or 
    v.venda in (
                select v1.venda
                from venda v1
                where v1.cidade in ('1','2','21','41') 
                and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)
                )

 

Seria isto ?

 

Isso mesmo

 

select * from venda v

where V.MAPA IS NULL

and v.cancelado is null

and (v.operacao not in ('53','54','28','8','18','22','27','110','101','111')

or v.venda in

(

select v1.venda

from venda v1

where v1.operacao in ('1','2','21','41') and

V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)))

 

Mesmo assim da o mesmo resultado sem os parenteses.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tudo bem pessoal?

Estou com uma dificuldade que é a seguinte, fiz um select para trazer meus pedidos de venda e tenho varias cidades, então a primeira coisa que fiz foi pedir para trazer so as vendas que não estão dentro de mapas de entrega, depois as que não estão canceladas, depois as que não são de determinadas cidades até aqui tudo bem, mas por ultimo pedi para trazer apenas as vendas de algumas cidades "where v1.cidade in ('1','2','21','41')" que foram feitas no dia de hoje "V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)" porque as vendas feitas para essas cidades em outros dias não importa nessa consulta, para isso usei a clausula OR, mas com ela ou sem ela o firebird retorna o mesmo resultado que traz as vendas das cidades "where v1.cidade in ('1','2','21','41') independente do dia que foram feitas, não respeitando que eu quero apenas as vendas de hoje das determinadas cidades, trazendo ...

 

Achei este texto meio confuso confesso.

Tente escreve de forma hierárquica que talvez fique mais claro para montar a condição WHERE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei este texto meio confuso confesso.

Tente escreve de forma hierárquica que talvez fique mais claro para montar a condição WHERE.

 

Ok, vamos la:

 

(primeira parte: quero todas as vendas que não estão em mapa nenhum e não estejam canceladas)

select * from venda v where V.MAPA IS NULL and v.cancelado is null

 

(segunda parte: trazer as vendas das cidades que não sejam das cidades que coloquei no not in )

and (v. not in ('53','54','28','8','18','22','27','110','101','111')

 

(terceira parte: dessas vendas que retornaram quero retirar as da cidade ('1','2','21','41') que são de outros dias que não o dia de hoje, tipo o que vende na cidade ('1','2','21','41') ontem ja não me enteressa)

or v.venda in (select v1.venda from venda v1 where v1.cidade in ('1','2','21','41') and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)))

Compartilhar este post


Link para o post
Compartilhar em outros sites
(primeira parte: quero todas as vendas que não estão em mapa nenhum e não estejam canceladas)

 

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null

 

(segunda parte: trazer as vendas das cidades que não sejam das cidades que coloquei no not in )

 

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')

 

(terceira parte: dessas vendas que retornaram quero retirar as da cidade ('1','2','21','41') que são de outros dias que não o dia de hoje, tipo o que vende na cidade ('1','2','21','41') ontem ja não me enteressa)

 

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111','1','2','21','41')
and v.venda in (select v1.venda 
               from venda v1 
               where V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) 

 

isto ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null

 

 

 

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')

 

 

 

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111','1','2','21','41')
and v.venda in (select v1.venda 
               from venda v1 
               where V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) 

 

isto ?!

 

Desculpe Motta, mas não é isso. as cidades '1','2','21','41' devem sumir apenas se a venda não for do mesmo dia da data do firebird, venda feita para cidades '1','2','21','41' hoje dia 05/06 aparecem, vendas feitas para cidades '1','2','21','41' 05/05 não aparecem porque não são CURRENT_DATE FROM RDB$DATABASE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
and v.venda in (select v1.venda 
               from venda v1 
               where v.cidade not in ('1','2','21','41')
               and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) 

 

AND e não OR.

---------

Mas a ideia e com a regra esquematizada montar a sql.

Hoje está corrido aqui, sem muito tempo para analisar com mais calma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * from venda v 
where V.MAPA IS NULL 
and v.cancelado is null
and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
and v.venda in (select v1.venda 
               from venda v1 
               where v.cidade not in ('1','2','21','41')
               and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) 

 

AND e não OR.

---------

Mas a ideia e com a regra esquematizada montar a sql.

Hoje está corrido aqui, sem muito tempo para analisar com mais calma.

 

Se colocar and no lugar de or a consulta não retorna nada.

Sem problemas Motta, assim que puder voltamos no assunto.

Mas a ideia é essa, o problema esta so no que eu relatei na terceira parte, porque as vendas da cidade '1','2','21','41' estão retornando na consulta independente do dia que foi feita, sendo que eu quero trazer apenas as vendas da cidade '1','2','21','41' do dia de hoje e não de todos os dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * 
from venda v 
where (
      V.MAPA IS NULL 
      and v.cancelado is null
      and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
     ) 
      and
      (
      ( v.cidade in ('1','2','21','41')
        and V1.DATDOC = CURRENT_DATE )
       or
       ( v.cidade not in ('1','2','21','41') )
      )

 

tendo cuidado com esta síntaxe (teste de data), não sei se é assim em MySql

V1.DATDOC = CURRENT_DATE

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * 
from venda v 
where (
      V.MAPA IS NULL 
      and v.cancelado is null
      and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
     ) 
      and
      (
      ( v.cidade in ('1','2','21','41')
        and V1.DATDOC = CURRENT_DATE )
       or
       ( v.cidade not in ('1','2','21','41') )
      )

 

tendo cuidado com esta síntaxe (teste de data), não sei se é assim em MySql

V1.DATDOC = CURRENT_DATE

 

Bom dia Motta.

Para firebird sempre uso o SELECT CURRENT_DATE FROM RDB$DATABASE mesmo.

Vamos continuar na luta até conseguirmos trazer o que preciso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque então

 

V1.DATDOC = CURRENT_DATE

 

 

por

 

 

V1.DATDOC = (SELECT CURRENT_DATE FROM RDB$DATABASE)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, tentei assim:

select *
from venda v 
where (V.MAPA IS NULL)
and (v.cancelado is null)
and ((v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
or v.venda in
(
select v1.venda
               from venda v1 
               where v1.cidade in ('1','2','21','41')
               and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE)
               )))

Mas mesmo assim, o retorno da consulta esta trazendo todas as vendas das cidades '1','2','21','41' independente do dia que foi feita ao inves de trazer apenas as vendas das cidades '1','2','21','41' feitas no dia de hoje.

Sinceramente não sei o porque a consulta não entende que quero em relação apenas as cidades '1','2','21','41' as vendas so de hoje.

Compartilhar este post


Link para o post
Compartilhar em outros sites
select * 
from venda v 
where (
      V.MAPA IS NULL 
      and v.cancelado is null
      and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111')
     ) 
      and
      (
      ( v.cidade in ('1','2','21','41')
        and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE )
       or
       ( v.cidade not in ('1','2','21','41') )
      )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, problema resolvido

 

select * from venda v
where (V.MAPA IS NULL)
and (v.cancelado is null)
and ((v.operacao not in ('53','54','28','8','18','22','27','110','101','111','1','2','21','41')
or v.venda in (select v1.venda from venda v1 where v1.operacao in ('1','2','21','41')
and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))))

 

Obrigado a todos.

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.