Re: [pgbr-geral] Duvidas com Right Outer Join
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
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
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