Select nao Traz Registro (Interbase)

Firebird

05/10/2007

Ola !

estou com um pequeno problema, que nao concordo muito, mas acredito eu, que para voces a solucao do problema deve ser muito
simples de ser resolvido.
Tenho em meu sistema o processo de locacao e devolucao de produtos.

onde:

- Table_Pedidos

/*1º Pedido*/
numped = 101
codcli = 1256
nome_cli = ´JOAO DE BARRO´
dt_lanc = ´01/09/2007´

/*2º Pedido*/
numped = 102
codcli = 254
nome_cli = ´JOSE ANTONIO´
dt_lanc = ´02/10/2007´

/*3º Pedido*/
numped = 103
codcli = 561
nome_cli = ´BARTOLOMEU ANTONIO´
dt_lanc = ´03/10/2007´


- Table_Item_Pedido

/*Itens do 1º Pedido*/
numped = 101
codprod = 2568
codprod = 6598
codprod = 7821

/*Itens do 2º Pedido*/
numped = 102
codprod = 6598
codprod = 1011


/*Itens do 3º Pedido*/
numped = 103
codprod = 3254
codprod = 7821
codprod = 1011


Para a visualizar a devolucao do pedido de acordo com os itens informados estou executando a seguinte select


Select
p.numped,
p.nome_cli,
p.dt_lanc
from Table_Pedidos P, Table_Item_Pedido I
where p.numped = i.numped
and i.codprod = 7821


Ate aqui tudo certinho, seu eu informar apenas um produto... a minha select tras os registros encontrados

Pedido = 101
codcli = 1256
codprod = 2568
codprod = 6598
codprod = 7821 /*Item da Select*/


Pedido = 103
codcli = 561
codprod = 3254
codprod = 7821 /*Item da Select*/
codprod = 1011


o problema esta justamente na hora em que eu inclu-o mais uma clausula nesta
busca.

Select
p.numped,
p.nome_cli,
p.dt_lanc
from Table_Pedidos P, Table_Item_Pedido I
where P.numped = I.numped
and i.codprod = 7821
AND I.CODPROD = 1011

TEORICAMENTE o sistema teria de me trazer o registro

Pedido = 103
codcli = 561
codprod = 3254
codprod = 7821 /*Item da Select*/
codprod = 1011 /*Item da Select*/

que e justamente o que esta na clausula informada.


Mas o PROBLEMA esta justamente aqui. A minha select nao esta trazendo nenhum registro

se eu colocar no lugar do ´AND´ um ´OR´, ele ja passa a trazer todos os registro que constam as condicoes apresentadas,
o que para mim nao e viavel.


e agora pessoal o que eu tenho que fazer para resolver esse meu pequeno problema?.


Desde ja agradeço a atençao.


Anonimus.info

Anonimus.info

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

05/10/2007

Usando o AND, ele realmente não poderá trazer nada (já que as duas condições não podem ser satisfeitas ao mesmo tempo). Experimente fazer assim:

Select p.numped, p.nome_cli, p.dt_lanc 
from Table_Pedidos P, Table_Item_Pedido I 
where P.numped = I.numped 
and (i.codprod = 7821 or i.codprod = 1011)



GOSTEI 0
Anonimus.info

Anonimus.info

05/10/2007

Usando o AND, ele realmente não poderá trazer nada (já que as duas condições não podem ser satisfeitas ao mesmo tempo). Experimente fazer assim:
Select p.numped, p.nome_cli, p.dt_lanc 
from Table_Pedidos P, Table_Item_Pedido I 
where P.numped = I.numped 
and (i.codprod = 7821 or i.codprod = 1011)



bom gandalf.nho fiz conforme o seu exemplo, mas infelizmente fica a mesma coisa que eu somente utilizar um OR

Select p.numped, p.nome_cli, p.dt_lanc
from Table_Pedidos P, Table_Item_Pedido I
where P.numped = I.numped
and i.codprod = 7821
or i.codprod = 1011

e praticamente a mesma coisa.


GOSTEI 0
Gandalf.nho

Gandalf.nho

05/10/2007

Tem certeza que fica igual? Afinal o uso de parênteses muda o resultado da query.


GOSTEI 0
Anonimus.info

Anonimus.info

05/10/2007

Sim.... pois se voce retirar os parenteses e colocar um DISTINCT no inicio o resultado sera o mesmo.

Select distinct p.numped, p.nome_cli, p.dt_lanc
from Table_Pedidos P, Table_Item_Pedido I
where P.numped = I.numped
and i.codprod = 7821
or i.codprod = 1011


Mas de qualquer forma muito obrigado pela explicacao, eu acrescentei mais algumas coisas na minha select que acabou atendendo bem a minha necessidade.


GOSTEI 0
POSTAR