Fórum Consulta em SQL #262093

15/12/2004

0

Pessoal,

Estou com um problema.

Criei um banco de dados onde tenho uma tabela com nome de EMPRESAS, nesta tabela tenho cadastrado revenda e clientes.
Tenho uma outra tabela com nome de PEDIDO onde tenho as vendas dos produto, o probelam é que na tabela pedio tenho em campo com nome de EMPRESAID onde terei os codigos os clientes e REVENDAID onde terei o código das revendas.

O problema é como fazer esta consulta, tentei fazer algo assim:
select empresa.Nome as Cliente, empresa.Nome as Revenda, pabx.nome as PABX, produto.nome as Produto, versao as Versão,
    tipo_pedido.nome as Tipo, pedido.quantidade, pedido.NumeroSerie, pedido.desconto,
    pedido.data, pedido.datafim, pedido.preco, pedido.FaixaVenda
    from (((pedido inner join empresa on pedido.EmpresaID = empresa.EmpresaID and pedido.RevendaID = empresa.EmpresaID)
     inner join pabx on pedido.pabxID = pabx.numero)
     inner join produto on pedido.produtoID = produto.produtoId)
     inner join tipo_pedido on pedido.TipoPedidoID = tipo_pedido.TipoPedidoID;


sei que esta errado porque não exibiu nenhum registro e além disso tem outros problemas de lógica.

espero que tenha explicado direito

alguem poderia me ajudar??


Douglasf

Douglasf

Responder

Posts

15/12/2004

Rômulo Barros

Não sei se entidi direitinho, mas vamos lá:

:arrow: [b:355a1f9f05]1 - Sua Tabela Empresa possui os campos REVENDA e CLIENTE ou esses últimos são outras tabelas?[/b:355a1f9f05]

:arrow: [b:355a1f9f05]2 - Sua tabela PEDIDO possui apenas como FK o EMPRESAID ou ela também possui o CLIENTEID e o REVENDAID?[/b:355a1f9f05]

[color=red:355a1f9f05][b:355a1f9f05]Poste a estrutura das tabelas envolvidas no SELECT que poderemos ajudá-lo melhor.[/b:355a1f9f05][/color:355a1f9f05] :wink:


Responder

Gostei + 0

15/12/2004

Emerson Nascimento

select cli.Nome as Cliente, rev.Nome as Revenda, pabx.nome as PABX,
    produto.nome as Produto, versao as Versão, tipo_pedido.nome as Tipo,
    pedido.quantidade, pedido.NumeroSerie, pedido.desconto,
    pedido.data, pedido.datafim, pedido.preco, pedido.FaixaVenda
from pedido
left join tipo_pedido on (tipo_pedido.TipoPedidoID=pedido.TipoPedidoID)
left join empresa cli on (cli.EmpresaId=pedido.EmpresaID)
left join empresa rev on (rev.EmpresaId=pedido.RevendaID)
left join pabx on (pabx.numero=pedido.pabxID)
left join produto on (produto.produtoId=pedido.produtoID)
where ....


Responder

Gostei + 0

15/12/2004

Douglasf

A estrutura da tabela cliente é esta:
| EmpresaID | mediumint(9) | Nome | varchar(80) | Municipio | varchar(40) | Endereco | varchar(100) | Estado | char(3) | CEP | varchar(12) | CNPJ | varchar(18) | Inscricaomunicipal | varchar(18) | InscricaoEstadual | varchar(18) | Observacao | text | TipoEmpresaID | mediumint(8) unsigned | area | varchar(100) | email | varchar(80)


A estrutura da tabela pedido é esta:

| PedidoID | mediumint(8) unsigned | EmpresaID | mediumint(8) unsigned | RevendaID | mediumint(8) unsigned | PABXID | mediumint(8) unsigned | ProdutoID | mediumint(8) unsigned | Versao | varchar(5) | TipoPedidoID | mediumint(8) unsigned | Quantidade | varchar(10) | NumeroSerie | varchar(10) | desconto | varchar(5) | Data | date | DataFim | date | Observacao | text | Preco | decimal(7,2) | FaixaVenda | mediumint(9)


A questão é a seguinte, dentro ta tabela PEDIDO tenho dois campos EmpresaID e RevendaID onde os dois campos pegam informações da tabela empresa.


Responder

Gostei + 0

15/12/2004

Emerson Nascimento

esse exemplo funcionaria perfeitamente no SQL Server, no Interbase e no Firebird, mas você não informou qual banco de dados utiliza...



select cli.Nome as Cliente, rev.Nome as Revenda, pabx.nome as PABX,
    produto.nome as Produto, versao as Versão, tipo_pedido.nome as Tipo,
    pedido.quantidade, pedido.NumeroSerie, pedido.desconto,
    pedido.data, pedido.datafim, pedido.preco, pedido.FaixaVenda
from pedido
left join tipo_pedido on (tipo_pedido.TipoPedidoID=pedido.TipoPedidoID)
left join empresa cli on (cli.EmpresaId=pedido.EmpresaID)
left join empresa rev on (rev.EmpresaId=pedido.RevendaID)
left join pabx on (pabx.numero=pedido.pabxID)
left join produto on (produto.produtoId=pedido.produtoID)
where ....


Responder

Gostei + 0

15/12/2004

Douglasf

Ops...

Uso o MySQL.


Responder

Gostei + 0

15/12/2004

Douglasf

Funcionou...

muito bom.

Não conhecia o left Join. Qual seria a diferença dele para o inner join?


Responder

Gostei + 0

15/12/2004

Emerson Nascimento

left join - traz os registros que estão na tabela à esquerda do join, independente de estarem na tabela à direita (em função dos campos de relacionamento)
inner join - traz os registros somente se estiverem em embas tabelas (em função dos campos de relacionamento)

por exemplo:

tab1
ID     Nome      Cidade      UF
1      Teste1    São Paulo   SP
3      Teste3    São Paulo   SP
4      Teste4    São Paulo   SP

tab2
Numero     ID_Tab1      Valor
000001     1            100,00
000002     2            250,00
000003     2            250,00
000004     3            250,00
000005     3            250,00
000006     5            250,00
000007     5            250,00


utilizando os valores sugeridos acima, teríamos:

[size=18:dce7789a88]com left[/size:dce7789a88]
select *
from tab2
left join tab1 on (tab1.ID=tab2.ID_Tab1)

resultando:
Numero     ID_Tab1      Valor     ID     Nome      Cidade      UF
000001     1            100,00    1      Teste1    São Paulo   SP
000002     2            250,00    NULL   NULL      NULL        NULL
000003     2            250,00    NULL   NULL      NULL        NULL
000004     3            250,00    3      Teste3    São Paulo   SP
000005     3            250,00    3      Teste3    São Paulo   SP
000006     5            250,00    NULL   NULL      NULL        NULL
000007     5            250,00    NULL   NULL      NULL        NULL


[size=18:dce7789a88]com inner[/size:dce7789a88]
select *
from tab2
inner join tab1 on (tab1.ID=tab2.ID_Tab1)

resultando:
Numero     ID_Tab1      Valor     ID     Nome      Cidade      UF
000001     1            100,00    1      Teste1    São Paulo   SP
000004     3            250,00    3      Teste3    São Paulo   SP
000005     3            250,00    3      Teste3    São Paulo   SP



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar