SQL - IDENTIFICAR TABELA

FBUR 23/02/2015 17:31:28
#444711
Boa tarde!

Eu tenho duas tabelas onde irei fazer um SELECT UNION. Elas, claro, têm campos com os mesmos nomes e campos com nomes únicos.

Preciso identificar de qual tabela vêm os dados.

é possível?

Abs.
PROFESSOR 23/02/2015 22:40:16
#444717
Resposta escolhida
Sim, tem, claro. Por meio da mesma instrução sql de UNION que você usa.
Por exemplo, digamos que você possui os três campos em comum: Nome, Sobrenome e Nascimento, você pode complementar sua consulta como abaixo:

SELECT Nome, Sobrenome, Nascimento, [ô]Tabela1[ô] As Tabela FROM minhaTabela1 UNION
SELECT Nome, Sobrenome, Nascimento, [ô]Tabela2[ô] As Tabela FROM minhaTabela1;


A consulta resultante terá 4 campos, sendo o conteúdo do campo [Ô]Tabela[Ô] a identidade de suas tabelas.
FBUR 24/02/2015 13:33:30
#444748
Boa tarde Professor!

Na verdade o que eu preciso é identificar a qual tabela pertence o registro.

Por exemplo, supondo que ambas as tabelas só tem um nome, sobrenome e nascimento. Mas vou usar somente o campo nome.

Na tabela1 existe o nome [Ô]Juca[Ô]
na tabela2 existe o nome [Ô]Pelé[Ô]

Usando o UNION (no meu caos UNION ALL para retornar os registros duplicados), irá retornar [Ô]Juca[Ô] e [Ô]Pelé[Ô]. Mas eu gostaria de identificar, por exemplo, se [Ô]Juca[Ô] pertence a tabela1 ou a tabela2.
F001E 24/02/2015 13:57:12
#444749
mesmo você usando somente o campo Nome terá que colocar isso [ô]Tabela1[ô] As Tabela como o Professor mencionou. Só assim para saber em qual tabela vem o registro...
FBUR 24/02/2015 14:36:54
#444753
Sim, mas eu preciso retornar a tabela que o registro pertence. Por exemplo, se o nome [Ô]Juca[Ô] pertence a tabela1, eu jogo [Ô]tabela1[Ô] para uma variável.

Eu sei que a tabela tem um alias. Eu não quero identificá-la na expressão SQL. Eu preciso retornar para o sistema a qual tabela pertence cada nome.

Entendeu?
PROFESSOR 24/02/2015 17:36:42
#444758
FBUR

A solução é bem simples. E pode até parecer, mas em nenhum momento eu utilizei um Alias de tabela em meu exemplo.

Mas, não se preocupe, pois o fato de que meu exemplo também não está certo (eu copiei e colei a primeira linha na segunda e não alterei o conteúdo da forma adeqüada), deve ter contribuído ainda mais na confusão.

O correto é, por exemplo:


...
SELECT Nome, Sobrenome, Nascimento, [ô]minhaTabela1[ô] As Tabela FROM minhaTabela1 UNION
SELECT Nome, Sobrenome, Nascimento, [ô]minhaTabela2[ô] As Tabela FROM minhaTabela2 UNION
SELECT Nome, Sobrenome, Nascimento, [ô]minhaTabela3[ô] As Tabela FROM minhaTabela3;
...


Nesse exemplo, as tabelas minhaTabela1, minhaTabela2 e minhaTabela3 possuem os três campos Nome, Sobrenome e Telefone com os mesmos tipos de dados e características.

A consulta, no entanto, retorna quatro campos, um deles denominado [Ô]Tabela[Ô], que não está armazenado em nenhuma das tabelas, mas que retorna um valor textual com o nome da tabela que é [Ô]dona[Ô] do registro.

Em tempo: [Ô]Copiar e colar[Ô] não é atalho, é ato-falho. Eu reclamo muito de quem tem esse costume, mas não estou livre dele, como se pode ver. Assim sendo, façam o que eu falo, não o que eu faço.
NICKOSOFT 25/02/2015 06:04:43
#444765
show professor, bem desse jeitinho, usei isso uma vez na vida, q já nem me lembrava mesmo de como fazer
da tabela vem os 3 campos selecionados, o quarto campo totalmente virtual retorna a informação da tabela, mas da forma q explicou acredito q ele tenha entendido sem qq problema...
FBUR 04/03/2015 22:05:13
#444978
Agora entendi sim. Perfeito!

Obrigado!

Abs.
Tópico encerrado , respostas não são mais permitidas