Re: [pgbr-geral] Duvidas com Right Outer Join

2011-10-14 Por tôpico Marcal Hokama


 From: marc...@ig.com.br 
 To: pgbr-geral@listas.postgresql.org.br 
 Date: Thu, 13 Oct 2011 11:07:23 -0300 
 Subject: [pgbr-geral] Duvidas com Right Outer Join 
 
 Pessoal mais uma vez preciso da vossa ajuda [Alegre] 
 
 Tenho o seguinte select 
 
 select distinct f.data_age, a.cod_key, a.cod_id, d.nome, d.end_abr, 
 d.end_cad, d.end_num, d.end_com, d.end_bai, d.end_cid, d.end_est, 
 end_cep, a.pedido, a.data_age, a.hora_age, a.hora_fim, a.codigo, 
 b.descricao, c.qtd_item, e.obs_tecnico, a.tipo, a.agendamento, 
 a.cod_ope, a.data_cad, a.obs, a.observacoes, a.obs_interna 
 from mv_vendas_pre_agenda a 
 inner join mv_produtos b on(b.codigo = a.codigo) 
 inner join mv_vendas_pre_itens c on(c.cod_id = a.cod_id) 
 and(c.pedido = a.pedido) 
 and(c.codigo = a.codigo) 
 and(c.obs not in('C')) 
 left join mv_vendas e on(e.cod_id = a.cod_id) 
 and(e.pedido = a.pedido) 
 inner join mv_clientes d on(d.cod_id = a.cod_id) 
 right join mv_vendas_pre_mes f on(f.data_age = a.data_age) 
 where (a.obs not in('C')) 
 and(b.tipo = 'M') 
 and((a.data_age is null)or(a.data_age = '01/10/2011')) 
 order by a.data_age, a.hora_age, a.cod_id 
 
 
 Desculpe colocar o select todo, mas acho que fica melhor a compreensão 
 
 A ideia é que a tabelas mv_vendas_pre_mes ( F ) tem registros que não 
 tem na tabela ( A ) 
 Mas preciso trazer essas datas justamente pra mostrar que não existem 
 agendamentos naquele dia. 
 
 Imagino que o Right Join deveria trazer todos os registros da tabela ( 
 F ) mesmo não contendo a referncia, mas não é isso que ocorre. 
 Não estou compreendendo esse Right 
 
 Eu preciso que a tabela ( A ) seja a tabela principal do select 
 


 Olá Marcelo,
Como você não usou parênteses nos seus joins, a ordem de junção será da 
esquerda para direita (conforme [1]).
Seguindo a ordem do seu select, as junções ficariam da seguinte forma:
 ((mv_vendas_pre_agenda+mv_produtos+mv_vendas_pre_itens-mv_vendas)+mv_clientes)-mv_vendas_pre_mes  
Neste caso, serão mostrados todos os registros da tabela 
mv_vendas_pre_mes(direita do right join), e quando tiver relacionamentos, 
mostrará o resultado dos outros joins, senão mostrará null. Aí a tabela 
principal fica sendo a F.
   [1]http://www.postgresql.org/docs/9.0/static/sql-select.html
 Atenciosamente,
 Marçal de Lima Hokamaattachment: wlEmoticon-smile[1].png___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Duvidas com Right Outer Join

2011-10-13 Por tôpico Marcelo Silva (IG)
Pessoal mais uma vez preciso da vossa ajuda 

Tenho o seguinte select

select distinct f.data_age, a.cod_key, a.cod_id, d.nome, d.end_abr, d.end_cad, 
d.end_num, d.end_com, d.end_bai, d.end_cid, d.end_est, end_cep, a.pedido, 
a.data_age, a.hora_age, a.hora_fim, a.codigo, b.descricao, c.qtd_item, 
e.obs_tecnico, a.tipo, a.agendamento, a.cod_ope, a.data_cad, a.obs, 
a.observacoes, a.obs_interna 
from mv_vendas_pre_agenda a 
inner join mv_produtos b on(b.codigo = a.codigo) 
inner join mv_vendas_pre_itens c on(c.cod_id = a.cod_id)
   and(c.pedido = a.pedido)
   and(c.codigo = a.codigo)   
   and(c.obs not in('C')) 
left join mv_vendas e on(e.cod_id = a.cod_id)
   and(e.pedido = a.pedido) 
inner join mv_clientes d on(d.cod_id = a.cod_id) 
right join mv_vendas_pre_mes f on(f.data_age = a.data_age)
where (a.obs not in('C')) 
and(b.tipo = 'M') 
and((a.data_age is null)or(a.data_age = '01/10/2011')) 
order by a.data_age, a.hora_age, a.cod_id


Desculpe colocar o select todo, mas acho que fica melhor a compreensão

A ideia é que a tabelas mv_vendas_pre_mes ( F ) tem registros que não tem na 
tabela ( A )
Mas preciso trazer essas datas justamente pra mostrar que não existem 
agendamentos naquele dia.

Imagino que o Right Join deveria trazer todos os registros da tabela ( F ) 
mesmo não contendo a referncia, mas não é isso que ocorre.
Não estou compreendendo esse Right

Eu preciso que a tabela ( A ) seja a tabela principal do select

Agradeço todas as dica 


Marcelo Silva
--
Desenvolvedor Delphi, PHP
msn: marc...@ig.com.br
cel.: (11) 9693-4251wlEmoticon-smile[1].png___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvidas com Right Outer Join

2011-10-13 Por tôpico Osvaldo Kussama
Em 13 de outubro de 2011 11:07, Marcelo Silva (IG) marc...@ig.com.br escreveu:

 Pessoal mais uma vez preciso da vossa ajuda

 Tenho o seguinte select

 select distinct f.data_age, a.cod_key, a.cod_id, d.nome, d.end_abr, 
 d.end_cad, d.end_num, d.end_com, d.end_bai, d.end_cid, d.end_est, end_cep, 
 a.pedido, a.data_age, a.hora_age, a.hora_fim, a.codigo, b.descricao, 
 c.qtd_item, e.obs_tecnico, a.tipo, a.agendamento, a.cod_ope, a.data_cad, 
 a.obs, a.observacoes, a.obs_interna
 from mv_vendas_pre_agenda a
 inner join mv_produtos b on(b.codigo = a.codigo)
 inner join mv_vendas_pre_itens c on(c.cod_id = a.cod_id)
    and(c.pedido = a.pedido)
    and(c.codigo = a.codigo)
    and(c.obs not in('C'))
 left join mv_vendas e on(e.cod_id = a.cod_id)
    and(e.pedido = a.pedido)
 inner join mv_clientes d on(d.cod_id = a.cod_id)
 right join mv_vendas_pre_mes f on(f.data_age = a.data_age)
 where (a.obs not in('C'))
 and(b.tipo = 'M')
 and((a.data_age is null)or(a.data_age = '01/10/2011'))
 order by a.data_age, a.hora_age, a.cod_id


 Desculpe colocar o select todo, mas acho que fica melhor a compreensão

 A ideia é que a tabelas mv_vendas_pre_mes ( F ) tem registros que não tem na 
 tabela ( A )
 Mas preciso trazer essas datas justamente pra mostrar que não existem 
 agendamentos naquele dia.

 Imagino que o Right Join deveria trazer todos os registros da tabela ( F ) 
 mesmo não contendo a referncia, mas não é isso que ocorre.
 Não estou compreendendo esse Right

 Eu preciso que a tabela ( A ) seja a tabela principal do select



Tente definir explicitamente, com o uso de parênteses a ordem de seus join.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral