Consulta em SQL
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:
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??
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
Curtidas 0
Respostas
Rômulo Barros
15/12/2004
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:
: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:
GOSTEI 0
Emerson Nascimento
15/12/2004
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 ....
    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 ....
GOSTEI 0
Douglasf
15/12/2004
A estrutura da tabela cliente é esta:
A estrutura da tabela pedido é esta:
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.
| 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.
GOSTEI 0
Emerson Nascimento
15/12/2004
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 ....
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 ....
GOSTEI 0
Douglasf
15/12/2004
Ops...
Uso o MySQL.
Uso o MySQL.
GOSTEI 0
Douglasf
15/12/2004
Funcionou...
muito bom.
Não conhecia o left Join. Qual seria a diferença dele para o inner join?
muito bom.
Não conhecia o left Join. Qual seria a diferença dele para o inner join?
GOSTEI 0
Emerson Nascimento
15/12/2004
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:
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:
[size=18:dce7789a88]com inner[/size:dce7789a88]
select *
from tab2
inner join tab1 on (tab1.ID=tab2.ID_Tab1)
resultando:
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
GOSTEI 0