Duvidas - FULL OUTER JOIN

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

Ola pessoal, como vão ?!

Estou com um problema que pode até ser simples, ou alguma besteira que esteja fazendo, porem vem me intrigando.

Pelo o que sei, a teoria do FULL OUTER JOIN diz que deveriam ser exibidos registros de duas tabelas mesmo que a chave de relacionamento não seja verdadeira.

Bom, o fato é que na tentativa de executar uma query deste tipo(primeira vez que necessitei de realizar isso no Oracle), registros em que não possuem relação entre as tabelas não são exibidos.

Como teste, criei o seguinte cenario:

Selecionar tudo

CREATE TABLE TESTE_1 
   (	ID NUMBER(1,0), 
	DESCRICAO VARCHAR2(10)
   ) ;

  CREATE TABLE TESTE_2 
   (	ID NUMBER(1,0), 
	DESCRICAO VARCHAR2(10)
   ) ;

INSERT INTO TESTE_1  VALUES (1, 'TESTE1');
INSERT INTO TESTE_2  VALUES (2, 'TESTE2');
COMMIT;

E eu executei a query :

Selecionar tudo

SELECT T1.ID, T1.DESCRICAO ,
           T2.ID, T2.DESCRICAO 
 FROM TESTE_1 T1
   FULL OUTER JOIN TESTE_2 T2 
      ON (T1.ID = T2.ID)
Query acima não retorna linha alguma.

Ai vem a pergunta, esta query deveria trazer todos os registros de ambas as tabelas?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá gpereira,

Engraçado, eu repeti seu exemplo em minha base de dados, e obtive resultados !
SQL*Plus: Release 11.2.0.2.0 Production on Ter Dez 4 16:46:51 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.

Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

SQL> CREATE TABLE TESTE_1
2 ( ID NUMBER(1,0),
3 DESCRICAO VARCHAR2(10)
4 ) ;

Tabela criada.

SQL>
SQL> CREATE TABLE TESTE_2
2 ( ID NUMBER(1,0),
3 DESCRICAO VARCHAR2(10)
4 ) ;

Tabela criada.

SQL>
SQL> INSERT INTO TESTE_1 VALUES (1, 'TESTE1');

1 linha criada.

SQL> INSERT INTO TESTE_2 VALUES (2, 'TESTE2');

1 linha criada.

SQL> COMMIT;

Commit concluÝdo.

SQL>
SQL>
SQL> SELECT T1.ID, T1.DESCRICAO ,
2 T2.ID, T2.DESCRICAO
3 FROM TESTE_1 T1
4 FULL OUTER JOIN TESTE_2 T2
5 ON (T1.ID = T2.ID)
6 /
SQL>
ID DESCRICAO ..........ID DESCRICAO
---------- ---------- ---------- ----------
............................... 2 TESTE2
.......1 TESTE1 .........................

SQL>
Qual seria a versão de banco onde você esta fazendo este teste?

Abraços,

Sergio Coutinho
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

Ola Sergio !

Esta na 11g ...

Acha que pode ser algum bug ?

Obrigado.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Hum,

Não sei, não me parece bug. Minha versão é a 11g também (o release exato eu postei no teste que lhe mostrei).

Você consegue repetir exatamente o teste que eu fiz (ver no meu teste) - com os mesmos comandos que eu fiz - e postar o resultado aqui?

Mas só que faça este teste pelo SQL*Plus, como eu fiz, oK?

Pra saber a versão exata, faça um SELECT * FROM V$VERSION.

Abraços,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 22 visitantes