Oracle SQL Select: Se não existir, deixe em branco

1

Eu tenho duas tabelas:

Table1
[ID]   [Number]
1      40
2      100
3      7

e

Table2
[ID]   [Number]   [Name]
1      40         A
3      7          C

Os dados são originados na Tabela 1 e depois são copiados para a Tabela 2 (com um Nome adicionado) após a conclusão de alguns processos. Eu estou tentando SELECT tudo na tabela 1 ao mesmo tempo, mostrando o campo nome da tabela2, se ele existir. Se o campo Nome não existir (ou, mais corretamente, se o ID ainda não existir na Tabela 2), desejo deixar o campo em branco.

Saída desejada:

[ID]   [Number]   [Name]
1      40         A
2      100
3      7          C

Tentativa:

SELECT Table1.ID,Table1.Number,Table2.Name
WHERE Table1.ID=Table2.ID

Minhas tentativas atuais omitiram completamente [ID] 2 , pois a instrução que estou tentando está procurando a ID nas duas tabelas e a encontra apenas na Tabela1. Meu palpite é que posso precisar usar COALESCE , ISNULL ou JOIN , todos estranhos para mim. Alguma destas (ou combinação de muitas) são as ferramentas certas para o trabalho? Existe uma maneira de incluir o campo Name somente se ele existir e, caso contrário, deixá-lo em branco?

    
por root 11.09.2014 / 14:19

1 resposta

2

Para alcançar o resultado desejado, você precisa usar uma junção externa (exemplo em Sintaxe válida desde o Oracle 9i):

SELECT
  Table1.ID,
  Table1.Number,
  Table2.Name
FROM Table1
OUTER JOIN Table2
  ON Table1.ID = Table2.ID

Atualizar

Para explicar as coisas um pouco mais (como mencionado por duDE):

A junção usada na pergunta é chamada equi-join, isso significa que somente linhas em Table1 são selecionadas e também existem em Table2 (e vice-versa).

A junção externa seleciona todas as linhas contidas em Table1 e une todas as linhas correspondentes de Table2 . Se Table2 não contiver uma linha correspondente, então null será retornado para todas as colunas.

    
por 11.09.2014 / 14:22

Tags