Galera…
no join ( na mãozona mesmo)
pegamos para igualar só primary keys, (seria mais trabalhoso pro banco !?)
ou primary keys e foreign keys ??? ( mais trabalho pro desenvolvedor !!!)
valews!

Galera…
no join ( na mãozona mesmo)
pegamos para igualar só primary keys, (seria mais trabalhoso pro banco !?)
ou primary keys e foreign keys ??? ( mais trabalho pro desenvolvedor !!!)
valews!

Em JOINs, você sempre iguala chaves primárias de uma tabela com chaves estrangeiras da outra.
Exemplo:
Pessoa
ContatoPessoa
SELECT p.Nome, cp.Telefone
FROM Pessoa p
INNER JOIN ContatoPessoa cp ON cp.idPessoa = p.idPessoa
Abraços
pois é... mas olha só... como o pessoal faz aki..
SELECT cc.loj_loja,
cc.cli_cliente,
vv.ven_venda,
vv.cli_cliente,
fpg.loj_loja,
fpg.ven_venda,
pdt.tir_parcela
FROM cliente cc,
venda vv,
ponte fpg,
ponte_d_titulo pdt
WHERE cc.loj_loja = vv.loj_loja
AND cc.loj_loja = fpg.loj_loja
AND cc.loj_loja = pdt.loj_loja
AND vv.ven_venda = pdt.ven_venda
AND vv.ven_venda = fpg.ven_venda
não posso fazer assim... não posso filtrar loj_loja e ven_venda ao mesmo tempo...
tem q ser uma ou outra! senão o maldito nao aceita!
teria outra solução!?
Coloque a estrutura das tabelas envolvidas e dê mais detalhes sobre o que você precisa que essa consulta retorne.
pois é.. os campos são PK...
cliente
----------
loj_loja - PK
cli_cliente - PKvenda
----------
loj_loja - PK
ven_venda - PKponte
----------
loj_loja - PK
ven_venda - PKponte_d_titulo
-------------------
loj_loja - PK
ven_venda - PK
como to fazendo um relatorio no iReport.. e são muitos registros....
ta demorando demais...
daí me falaram pra filtrar primary keys... q sairia + rapido
estou em dúvida em proceder....
aki ele nao roda, quando filtro loj_loja e ven_venda juntos...# WHERE cc.loj_loja = vv.loj_loja
# AND cc.loj_loja = fpg.loj_loja
# AND cc.loj_loja = pdt.loj_loja
# AND vv.ven_venda = pdt.ven_venda
# AND vv.ven_venda = fpg.ven_venda
só separadamente... :cry:
teste
!?
teste…
ja testei!!!
não funfa de jeito nenhum…
Felipe,
Esse seu modelo está estranho!
Pelo que entendi não tem como você implementar um relacionamento entre a venda e o cliente.
Veja se o seu modelo responde essa pergunta, que isso que está faltando na sua base.
Kra posta pra mim qual o resultado que você quer.
Exemplo:
Totalizar vendas por loja
Todas as vendas de uma loja
Obs: Teu modelo não permite relacionar venda x cliente
SELECT cc.loj_loja,
cc.cli_cliente,
cc.cic_cep,
cc.cli_nome,
cc.cli_cpf_cgc,
cc.cli_endereco,
vv.ven_venda,
vv.ven_data,
vv.ven_valor,
vv.ven_desc
--vv.cli_cliente,
--fpg.loj_loja,
--fpg.ven_venda,
--fpg.fve_codigo,
--pp.pes_codigo,
--pp.pes_cidade,
--pp.pes_uf
FROM greletro.cliente cc,
venda vv,
ponte_eletro fpg,
cliente_nome cn,
asa_venda fv
pessoa pp
WHERE cc.loj_loja = vv.loj_loja
AND vv.loj_loja = fpg.loj_loja
AND vv.ven_venda = fpg.ven_venda
AND cc.cli_cliente = vv.cli_cliente
AND fpg.fve_codigo = fv.fve_codigo
--AND pp.emp_codigo = cc.loj_loja
--AND pp.emp_codigo = cn.emp_codigo
--AND pp.pes_codigo = cn.pes_codigo
--AND vv.loj_loja = 154
AND vv.ven_venda = 13661
tudo sobre um cliente e o q comprou (futuramente vou implantar) através de um numero de venda
no caso --> ven_venda = 13661
meu problema são os filtros.... aaaaafffffi
so quando defino a loja = 154 tb... é q vem um unico registro
tirando ela ainda da pau...
mexer com select é coisa do demo... principalmente com umas tabelas malucas dessas...
acho que você está utilizando duas relações que estão sendo excludentes:
SELECT cc.loj_loja,
cc.cli_cliente,
cc.cic_cep,
cc.cli_nome,
cc.cli_cpf_cgc,
cc.cli_endereco,
vv.ven_venda,
vv.ven_data,
vv.ven_valor,
vv.ven_desc
–vv.cli_cliente,
–fpg.loj_loja,
–fpg.ven_venda,
–fpg.fve_codigo,
–pp.pes_codigo,
–pp.pes_cidade,
–pp.pes_ufFROM greletro.cliente cc
LEFT JOIN venda vv ON cc.loj_loja = vv.loj_loja and cc.cli_cliente = vv.cli_cliente
LEFT JOIN ponte_eletro fpg ON vv.loj_loja = fpg.loj_loja and vv.ven_venda = fpg.ven_venda
LEFT JOIN pessoa pp ON pp.emp_codigo = cc.loj_loja
LEFT JOIN cliente_nome cn ON pp.pes_codigo = cn.pes_codigo <<----- aqui acho que deve ter uma relacao com cc
LEFT JOIN asa_venda fv ON fpg.fve_codigo = fv.fve_codigo–AND vv.loj_loja = 154
AND vv.ven_venda = 13661
Tente pensar nesse modelo segundo a tabela fato (na estrutura de cubos, normalmente desnormalizada e pode ser uma view em seu sistema ou uma subquery).
Identifique entre as tabelas quais são inner join e quais são outer, você fez tudo como se fosse inner, e talvez não seja.
Por exemplo os clientes que nunca compraram ou que a última compra já está no arquivo morto e as querys nada tem a retornar.
ai, voce pode pensar em usar subquerys e fazer a relação com elas, exemplo:
select …
from
(select … from pessoa,cliente) as cc
left join venda vv on cc.alguma_coisa = vv.alguma coisa
deixe o where apenas para os filtros, é mais fácil fazer combinações com OR, que acho que é o que você quer.
que banco você está utilizando?
fw
Acho que no seu caso todos os clientes já necessariamente já efetuaram uma compra isso?
Se for essa questão, certamente você só precisaria de uma query simples como essa.
Primeiro,
Selecione todos os clientes:
select cli.nom_cliente
, cli.cod_cliente
, cli.num_cpf
from cliente_nome cli
Segundo,
Selecionando todas as vendas de cada cliente:
select cli.nom_cliente
, cli.cod_cliente
, cli.num_cpf
, cli.endereco
, ven.ven_venda
, ven.ven_data
, ven.valor
, ven.ven_desc
from cliente_nome cli
, venda ven
where cli.cod_cliente = ven.cod_cliente
Terceiro,
Descobrindo em quais lojas as vendas de cada cliente foram realizadas:
select cli.nom_cliente
, cli.cod_cliente
, cli.num_cpf
, cli.endereco
, ven.ven_venda
, ven.ven_data
, ven.valor
, ven.ven_desc
, loj.cod_loja
, loj.desc_loja
from cliente_nome cli
, venda ven
, loja loj
where cli.cod_cliente = ven.cod_cliente
and lj.cod_loja = ven.cod_loja
sim sim é isso mesmo!
o filtro é o mais dificil do select… se mão fizer direito, ele multiplica as informações
Obrigado a todos!

Qual banco está utilizando?