Fórum USAR WHERE, AND E OR NA MESMA CONSULTA, USAR WHERE, AND E OR NA MESMA CONSULTA #418100
05/06/2012
0
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)))
Vou explicar a hierarquia do que preciso de retorno da consulta abaixo:
(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 que são de outros dias que não o dia de hoje, tipo o que vende na cidade (1,2,21,41) ontem já não me interessa por isso usei o CURRENT_DATE FROM RDB$DATABASE, interessa apenas as vendas da data de hoje que seria a data do banco-firebird)
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 de qualquer forma que eu faça, colocando ou retirando os parenteses o retorno é sempre o mesmo, sempre vem as vendas das cidades que preciso retirar da consulta usando o OR, sendo que pelo meu entender o que coloquei após o OR deveria não vir na consulta, alguma ideia?
Waister Marques
Curtir tópico
+ 0Posts
06/06/2012
William
Gostei + 0
06/06/2012
Waister Marques
Fiz dessa forma, mas a duvida é em relação o porque a minha terceira parte não esta retornando o resultado desejado.
Gostei + 0
06/06/2012
William
Do mesmo jeito que está postado...
Gostei + 0
06/06/2012
Gustavo Bretas
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))) )
Gostei + 0
06/06/2012
Waister Marques
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)
)))
Já havia feito essa tentativa, mas do mesmo jeito o retorno da consulta esta trazendo todas as vendas das cidades 1,2,21,41 e não apenas as feitas hoje, por algum motivo ele não esta entendendo que quero apenas as vendas de hoje em relação as cidades 1,2,21,41.
Gostei + 0
06/06/2012
Gustavo Bretas
(v.cidade not in (53,54,28,8,18,22,27,110,101,111)
Por que o campo cidade esta dividido em dois?
O que vc quer não seria isso:
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.datdoc >= (select current_date from rdb$database))
Gostei + 0
06/06/2012
Waister Marques
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))))
Essa acho que funciona.
Gostei + 0
06/06/2012
Waister Marques
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))))
Essa acho que funciona.
Gostei + 0
06/06/2012
Waister Marques
Gostei + 0
07/06/2012
Emerson Nascimento
tente assim:
select *
from venda
where mapa is null
and cancelado is null
and
(
v.operacao not in (53,54,28,8,18,22,27,110,101,111,1,2,21,41)
or
(v.operacao in (1,2,21,41) and v.datdoc >= CURRENT_DATE)
)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)