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

Responder a