________________________________ > 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 Hokama
<<attachment: 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