MySQL :: Adicionar um campo de nome da Tabela para uma UNION

Problema: Algumas vezes, quando se necessita fazer uma  consulta em duas tabelas diferentes para exibir numa mesma listagem usamos o comando SQL chamado de UNION. Porém, em alguns casos, temos que saber de onde os dados vieram – da primeira ou da segunda tabela (ou ainda de outras)?

Solução: Criar um campo temporário na consulta. Este campo temporário possuirá o nome da tabela. Assim, o resultado exibirá, além dos valores consultados, o nome da tabela de onde vem esses valores. Veja a figura abaixo:

Código Exemplo:

SELECT c.nome AS nome, c.id AS id, 'categoriaProduto' AS table_name FROM categoriaProduto c WHERE ativo=1

UNION ALL

SELECT p.titulo AS nome, p.id AS id, 'produto' AS table_name FROM produto p WHERE ativo=1 AND idCategoria = 0

ORDER BY nome

 

Explicando: Logo após selecionarmos as colunas que serão exibidas, definimos como se chamará o nome da tabela consultada na listagem, nessa caso, para a coluna table_name, teremos, respectivamente o nome da tabela como categoriaProduto e produto. Nesse caso utilizei o mesmo nome da tabela. Mas posso, sem problemas, alterar para o nome para um valor numérico para, depois, poder realizar a consulta de maneira mais rápida. Exemplo:
SELECT c.nome AS nome, c.id AS id, '1' AS table_name FROM categoriaProduto c...

Fonte primáriahttp://stackoverflow.com/questions/12992315/add-field-of-table-name-to-sql-results-from-union
OBS: O exemplo citado abaixo é próprio, não provém da fonte acima.

CategoriasSem categoria

2 comentários

  1. Luciano Responder

    Bom dia, eu tenho um select onde eu busco 3 colunas de 2 tabelas diferentes.
    Tenho 26 BD idênticos porém com dados diferentes e quero realizar em apenas um select todas as informações porém quando utilizo o UNION ele não me diz que que BD é o resultado

    O resultado obtido foi:

    total_usuarios | total_logins | logins_unicos
    2.037 37 16
    1.365 76 56
    15.256 276 98

    queria que ficasse desta forma:

    BD | total_usuarios | total_logins | logins_unicos
    bd_ac 2.037 37 16
    bd_pa 1.365 76 56
    bd_sp 15.256 276 98

    teria como ao invés de mostrar o nome da tabela mostrar o nome da banco?

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.