KB-93711: Função FULL OUTER JOIN retorna campos com valores nulos.

Descrição:

Como unir os dados de tabelas diferentes de um mesmo banco de dados com a função FULL OUTER JOIN? Preciso unir os dados de duas tabelas que possuem uma coluna semelhante entre si, que exibe a data, mas o outro campo de cada tabela apresenta ações diferentes. Para isso, criei um código SQL utilizando a função FULL OUTER JOIN, e gostaria de ordenar os dados na tabela na seguinte sequência: primeiro a TimeStamp, e logo após os dois campos separados. No entanto, ao unir os dados das tabelas em uma só, o campo DataHora da tabela resultante retorna valores nulos.

Na figura abaixo, vemos as tabelas utilizadas neste caso:

Diferentes tabelas do Elipse E3 para serem reunidas

Sintaxe SQL:

SELECT Tbl1.E3TimeStamp AS DataHora, Tbl1.Campo1,Tbl2.Campo2
FROM Tbl1
FULL OUTER JOIN Tbl2
ON Tbl1.E3TimeStamp = Tbl2.E3TimeStamp
ORDER BY DataHora ASC

O resultado da união destas tabelas através da função FULL OUTER JOIN está ilustrado na figura abaixo:

campos nulos são retornados

Por que isso acontece? Como posso resolver esta situação?

Solução:

Antes de tudo, é importante saber que quando se utiliza a função FULL OUTER JOIN para unir dados de tabelas com valores diferentes no campo E3TimeStamp, o resultado será nulo. Para que funcione perfeitamente, a função necessita que haja uma correspondência total entre os campos da Tabela 1 e da Tabela 2.

Dica: FULL OUTER JOIN e FULL JOIN significam a mesma função.

Dessa forma, para consertar a situação, basta substituir os valores da primeira tabela pelo E3TimeStamp da segunda tabela. Assim, os valores das colunas coincidirão, e por isso os valores de retorno não serão nulos. Para isto, utilize a função ISNULL. Essa função retorna um valor específico se a expressão for NULL; se a expressão não for NULL, ela retorna a expressão.

A sintaxe utilizada é:

ISNULL (expression, value)

O parâmetro expression testa se a expressão é NULL. O parâmetro value é retornado se a expression for NULL.

 

Exemplo de sintaxe SQL:

SELECT ISNULL (Tbl1.E3TimeStamp,Tbl2.E3TimeStamp) AS DataHora, Tbl1.Campo1,Tbl2.Campo2
FROM Tbl1
FULL OUTER JOIN Tbl2
ON Tbl1.E3TimeStamp = Tbl2.E3TimeStamp
ORDER BY DataHora ASC

 

Assim, o resultado será igual ao da figura abaixo:

como unir dados de diferentes tabelas com uma coluna em comum
Este artigo foi útil? Was this post helpful?
Yes0
No0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *