sábado, 7 de julho de 2007

Oracle : SQL : OUTER JOIN : continuando...

bom sobre o post anterior, resolveu em partes mas ainda sim não acabou sendo muito útil
pois acabei tendo de relacionar no SQL mais outras 3 entidades/tabelas, ai a coisa ficou feia...

por enquanto a solução mais rápida foi fragmentar em 3 consultas separadas...

Oracle : SQL : OUTER JOIN

hoje brigando com as SQL para Oracle tive a necessidade de fazer um JOIN entre 2 tabelas, bom até tudo bem, normalmente os JOINs que faço usam apenas 1 única coluna, mas nesse caso eu precisava realizar um que considerasse 3 colunas, as quais são chave primária de uma entidade na base de dados e utilizadas como chave estrangeira na outra...

e fui eu lá tentar, na primeira tentativa, fui no INNER JOIN padrão:

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A
INNER JOIN TB2 B ON ( B.CHAVE1 = A.CHAVE1 )
WHERE
A.CODIGO = 1

porém essa SQL não me garantia a precisão dos dados recuperados e fui eu tentar ( tudo bem que está errado, mas as vezes cometemos erros hauhauhau )

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A
INNER JOIN TB2 B ON (
B.CHAVE1 = A.CHAVE1 AND
B.CHAVE2 = A.CHAVE2 AND
B.CHAVE3 = A.CHAVE3
)
WHERE
A.CODIGO = 1

e como era de se prever não funcionou...
até que com a ajuda de um colega do trabalho ele me sugeriu algo que chamava de OUTER JOIN o qual é o respectivo formato abaixo:

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A,
TB2 B
WHERE
B.CHAVE1 (+)= A.CHAVE1 AND
B.CHAVE2 (+)= A.CHAVE2 AND
B.CHAVE3 (+)= A.CHAVE3 AND
A.CODIGO = 1

esse sim funcionou perfeitamente e me recuperou os dados de forma correta.