Hum, obrigado pela resposta Matheus...
Quanto o uso do case, neste select estou trabalhando com 2 tabelas por isso o 
Union
A tag (C ou P) é para saber de onde é o registro (C-Cliente ou P-Parceiro) 
Situacao e Ativo é o status do registro na tabela



Marcelo Silva
-----------------------------------


From: Matheus de Oliveira 
Sent: Monday, September 17, 2012 9:46 AM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Duvida no Retorno de um SQL


2012/9/17 Marcelo Silva <[email protected]>

  Senhores tenho o seguinte SELECT

  select z.* from(
    select cod_id, nome, fantasia, 'C' as tipo, cod_gru from mv_clientes (A)
    where (ativo not in('C'))
    union all
    select cod_id, nome, fantasia, 'P' as tipo, cod_gru from mv_parceiros (B)
    where (situacao not in('C'))
  ) as z
  where (z.cod_gru = :cod_gru)
  order by z.fantasia

  Pergunta:

  O Motor do Postgres Traz todos os registros das tabelas A e B e depois filtra 
na tabela resultante Z ?
  Ou ele consegue trazer somente os registros já de acordo com a condição Z ?
  Ou seria melhor eu já colocar os filtros nas tabela A e B ?



Não é garantido que funciona SEMPRE, mas quando possível o otimizador tenta 
"quebrar" a sub-consulta fazendo com que fique uma consulta só, mas se não der 
ele vai criar uma tabela temporário, digamos Z, e depois filtrar da mesma.

Use o EXPLAIN, é um bom indício pra saber como está se comportando nesse caso.

De qualquer forma em casos assim, eu prefiro usar o CASE, pra mim parece mais 
simples:

  select cod_id, nome, fantasia, CASE WHEN ativo <> 'C' THEN 'C' ELSE 'P' END 
as tipo, cod_gru
  from mv_clientes
  where (situacao not in('C') OR ativo not in('C')) AND cod_gru = :cod_gru


Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados PostgreSQL
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br




--------------------------------------------------------------------------------
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a