Select nao Traz Registro (Interbase)
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.
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
Curtidas 0
Respostas
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
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
05/10/2007
Tem certeza que fica igual? Afinal o uso de parênteses muda o resultado da query.
GOSTEI 0
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.
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