Não sei se minha pergunta é boba, mas:

      Porque fazer desse jeito é mais eficiente do que fazer um LEFT JOIN?


[]s

   Bene


Em 19/5/2010 12:37, Mozart Hasse escreveu:
> Mateus,
>
> Cuidado ao montar as combinações, há repetições na sua consulta. Faltou
> também NOT EXISTS nas tabelas que não sofreram INNER JOIN:
>
> -- com B sem C
> SELECT "campoA", "campoB", null as c
> FROM a INNER JOIN b ON (a.id= b.id)
> WHERE NOT EXISTS (SELECT 1 FROM c WHERE a.id= c.id)
>
> UNION all
>
> -- sem B sem C
> SELECT "campoA", null as b, null as c FROM a WHERE
> NOT EXISTS (SELECT 1 FROM b WHERE a.id= b.id)
> AND NOT EXISTS (SELECT 1 FROM c WHERE a.id= c.id)
>
> UNION all
>
> -- sem B com C
> SELECT "campoA", null as b, "campoC"
> FROM a INNER JOIN c ON (a.id= c.id)
> WHERE NOT EXISTS (SELECT 1 FROM b WHERE a.id= b.id)
>
> UNION all
>
> -- com B com C
> SELECT "campoA", "campoB", "campoC" as c FROM a
> INNER JOIN b ON (a.id= b.id)
> INNER JOIN c ON (a.id= c.id)
>
>
> Mozart
>
> ------ Original Message ------
>    
>> From: mateusgra<[email protected]>
>> Subject: Re: [pgbr-geral] Otimizar consulta com LEFT JOIN
>>
>> Seria assim:
>>
>> SELECT  "campoA", "campoB", null as c FROM a INNER JOIN b ON (a.id= b.id)
>> UNION all
>> SELECT  "campoA", null as b, null as c FROM a WHERE NOT EXISTS (SELECT 1
>> FROM b WHERE a.id= b.id)
>> UNION all
>> SELECT  "campoA", null as b, "campoC" FROM a INNER JOIN c ON (a.id= c.id)
>> UNION all
>> SELECT  "campoA", null as b, null as c FROM a WHERE NOT EXISTS (SELECT 1
>> FROM c WHERE a.id= c.id)
>>
>> Ocorreu duas linhas por registro.
>>      
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>    



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

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

Responder a