N�o sei qual Banco voc� esta usando, mas no Oracle dessa forma daria
certo...

Select   ProdutoPreco.CdEmpresa,
            ProdutoPreco.CdFilial,
            ProdutoPreco.CdTabela,
            ProdutoPreco.SqTabela,
            ProdutoPreco.TpItem,
            ProdutoPreco.CdProduto,
            ProdutoPreco.VlCusto,
            ProdutoPreco.VlVenda,
            ProdutoPreco.CdIndiceCusto,
            ProdutoPreco.CdIndiceVenda,
            ProdutoPreco.Obs ,
            ProdutoPreco.UpdRegistro,
            produto.DsVenda
>From    ProdutoPreco,
            (  Select   CdEmpresa,
                            CdFilial,
                            CdProduto,
                            DsVenda
                From    Produto
                Union All
                 Select   CdEmpresa,
                            CdFilial,
                            CdServico,
                            Descricao
                From    Servico ) produto
Where cdtabela = '10'
And     sqtabela= 1
And     produtopreco.tpitem = "5"
And     ProdutoPreco.CdEmpresa = Produto.CdEmpresa
And     ProdutoPreco.CdFilial = Produto.CdFilial
And     ProdutoPreco.CdProduto = Produto.CdProduto

A unica coisa que pode complicar desta forma, � voc� possui um servi�o com o
mesmo c�digo do produto, pois isso causar� a duplica��o das linhas.




----- Original Message -----
From: Alexandre <[EMAIL PROTECTED]>
To: Virtualand - SQLWin (Correio eletr�nico) <[EMAIL PROTECTED]>
Sent: Monday, August 07, 2000 10:38 AM
Subject: [sqlwin] Joins entre tabelas


> Preciso construir uma clausula SQL de uma tabela base e mais duas outras
para pegar a descricao.
> Tenho a tabela ProdutoPreco e preciso da descricao do Produto - tabela
Produto - ou a descricao do Servico - tabela Servico.
> A clausula abaixo est� replicando os registros. Se utilizo apenas Produto
ou Servico junto de ProdutoPreco , a sele��o fica correta mas com as 3
tabelas duplica tudo.
> As chaves primarias s�o:
> Produto = CdEmpresa, CdFilial, CdProduto
> Servico = CdEmpresa, CdFilial, CdServico
> ProdutoPreco = CdEmpresa, CdFilial, CdTabela, SqTabela, TpItem, CdProduto
nesta ordem.
>
> Se algu�m puder ajudar, grato.
>
> Select ProdutoPreco.CdEmpresa, ProdutoPreco.CdFilial,
ProdutoPreco.CdTabela,
> ProdutoPreco.SqTabela,  ProdutoPreco.TpItem,
ProdutoPreco.CdProduto,ProdutoPreco.VlCusto,
> ProdutoPreco.VlVenda, ProdutoPreco.CdIndiceCusto,
ProdutoPreco.CdIndiceVenda,  ProdutoPreco.Obs ,
>  ProdutoPreco.UpdRegistro , DsVenda =   CASE TpItem WHEN '5' then
Produto.DsVenda
> else Servico.Descricao end from ProdutoPreco, Produto  , Servico
> Where cdtabela = '10' and sqtabela= 1 and produtopreco.tpitem = "5" and
> (  (ProdutoPreco.CdEmpresa = Produto.CdEmpresa and
> ProdutoPreco.CdFilial = Produto.CdFilial    and
> ProdutoPreco.CdProduto = Produto.CdProduto)
> or
> (ProdutoPreco.CdEmpresa = Servico.CdEmpresa and
>   ProdutoPreco.CdFilial = Servico.CdFilial   and
>   ProdutoPreco.CdProduto = Servico.CdServico) )
>
> Lista de Centura SQLWindows
> Administrador : [EMAIL PROTECTED]
> [ http://www.centuraexplorer.com ]
> Para sair desta lista mande mensagem para:
> [EMAIL PROTECTED] sem nada no Subject e
> com o comando a seguir no corpo da msg:
> "unsubscribe sqlwin" (sem as aspas)

==============================================
Lista de Centura SQLWindows
Administrador : [EMAIL PROTECTED]
[ http://www.centuraexplorer.com ]
Para sair desta lista mande mensagem para:
[EMAIL PROTECTED] sem nada no Subject e
com o comando a seguir no corpo da msg:
"unsubscribe sqlwin" (sem as aspas)
==============================================

Responder a