none
Select Union identificando tabelas RRS feed

  • Pergunta

  • Boa noite,

    Gostaria de saber como fazer como fazer um select em duas tabelas, mesclar os registros e identificar de qual tabela é cada registro... hehe

    Por exemplo:

    SELECT Codigo, Nome FROM TBBanners UNION ALL SELECT Codigo, Nome FROM TBProdutos
    
    
    

    Gostaria que o resultado mesclasse os registros, colocando um da TBBanners, um da TBProdutos, um da TBBanners, um da TBProdutos... e assim sucessivamente...

    Além disso preciso saber de qual tabela é cada registro, para montar o link... por exemplo: para registros da tabela TBBanners, vou direcioná-lo para http://www.uol.com.br e para registros da tabela TBProdutos vou redirecionar para http://www.terra.com.br

    Alguém sabe como faço para incrementar esse select? e se ele está correto?

    Fico no aguardo...


    Eder Pardeiro
    quarta-feira, 21 de setembro de 2011 22:43

Todas as Respostas

  • Para saber de qual tabela é cada registro e o link para cada item vc pode fazer assim:

    SELECT Codigo, Nome, 'TBBanners' as Tabela, 'http://www.uol.com.br' as Link FROM TBBanners UNION ALL SELECT Codigo, Nome, 'TBProdutos' as Tabela, 'http://www.terra.com.br' as Link
     FROM TBProdutos



    </tbody
    Elvis Rodrigues
    Analista Desenvolvedor .Net
    MCTS .Net Framework, SQL Server 2005, WPF, ASP NET
    Email: foxelv@hotmail.com | Celular: (61) 9128-8082
    http://elvisrodrigues.wordpress.com/
    quinta-feira, 22 de setembro de 2011 13:36
  • Boa noite Elvis,

    Entendi o únion.... mas não sei como implementar no meu caso.... olha só como eu efetuo as consultas...

         ' ## Retorna os produtos e destaque...
         Set cmdRetornaDestaques = Server.CreateObject("ADODB.Command")
         cmdquesRetornaDestaques.ActiveConnection = DataProdutos
         cmdRetornaDestaques.CommandText = "SELECT * FROM TBProdutos Where ProdutoDestaque = 1 and StatusProduto = 1"
         cmdRetornaDestaques.CommandType = 1
         Set rsRetornaDestaques = Server.CreateObject("ADODB.Recordset")
         rsRetornaDestaques.Open cmdRetornaDestaques, , 3, 3

         ' ## Retorna os banners...
         Set cmdRetornaBanners = Server.CreateObject("ADODB.Command")
         cmdRetornaBanners.ActiveConnection = DataBanners
         cmdRetornaBanners.CommandText = "SELECT * FROM TBBanners"
         cmdRetornaBanners.CommandType = 1
         Set rsRetornaBanners = Server.CreateObject("ADODB.Recordset")
         rsRetornaBanners.Open cmdRetornaBanners, , 3, 3

    Como eu faço nesse caso? pois conecto as tabelas e executo a consulta separadamente....

    No aguardo


    Eder Pardeiro
    • Editado Eder Pardeiro sexta-feira, 30 de setembro de 2011 22:25
    sexta-feira, 30 de setembro de 2011 22:24
  • Boa tarde Eder.

     

    Veja se te ajuda.

     

    SELECT Codigo,Nome,'A' FROM TBBanners UNION ALL SELECT Codigo, Nome,'B' FROM TBProdutos

     

    A é a primeira tabela e a B é a segunda.

     

    Espero ter ajudado,

     

    Vinicius

     

    segunda-feira, 3 de outubro de 2011 20:56
  • Boa noite Vinicius,

    Até aí eu entendi... mas o meu problema é a forma que eu me conecto e executo o select...

    Me conecto através de uma string de conexão em um arquivo separado conectadb.asp.... até aí tudo bem...

    Para efetuar o select, eu tenho que definir qual conexão vou usar, como mostra abaixo:

      ' ## Retorna os produtos e destaque...
         Set cmdRetornaDestaques = Server.CreateObject("ADODB.Command")
         cmdquesRetornaDestaques.ActiveConnection = DataProdutos (isso conecta ao banco "Produtos.mdb")
         cmdRetornaDestaques.CommandText = "SELECT * FROM TBProdutos Where ProdutoDestaque = 1 and StatusProduto = 1"
         cmdRetornaDestaques.CommandType = 1
         Set rsRetornaDestaques = Server.CreateObject("ADODB.Recordset")
         rsRetornaDestaques.Open cmdRetornaDestaques, , 3, 3 (isso executa o select)

         ' ## Retorna os banners...
         Set cmdRetornaBanners = Server.CreateObject("ADODB.Command")
         cmdRetornaBanners.ActiveConnection = DataBanners (isso conecta ao banco "Banners.mdb")
         cmdRetornaBanners.CommandText = "SELECT * FROM TBBanners"
         cmdRetornaBanners.CommandType = 1
         Set rsRetornaBanners = Server.CreateObject("ADODB.Recordset")
         rsRetornaBanners.Open cmdRetornaBanners, , 3, 3 (isso executa o select)

    Sendo assim, como faço utilizo este método para me conectar ao banco e executar os selects, não sei como montar isso....


    Eder Pardeiro
    segunda-feira, 3 de outubro de 2011 22:23
  • Cara, insere todo o conteudo dentro de um datatable para unificar todo o conteudo ao inves de trabalhar separado. com isso voce vai conseguir fazer a separação que voce precisa.
    Vinicius Nunes Macedo
    terça-feira, 4 de outubro de 2011 15:50
  • Boa noite Pessoal,

    Primeiramente, muito obrigado por responder...

    Segui o exemplo do Elvinho e  o conselho do Vinicios e coloquei as duas tabelas no mesmo banco.... O select ficou assim:

    SELECT CodigoBanner as Codigo, '1' as Local FROM TBBanners where StatusBanner = 1 UNION ALL SELECT CodigoProduto as Codigo, '2' as Local FROM TBProdutos where StatusProduto = 1
    

    Sendo assim, eu analiso no final quando Local for igual a 1 redireciona para uma página, quando o Local for igual a 2, redireciona para outra....

    Meu problema agora é outro...

    Ele mostra todos os resultados da primeira tabela, depois mostra todos os resultados da segunda... Se for para obter este resultado, é melhor eu deixar como estava e fazer os selects separadamente... Será que dá para intercalar os resultados? Preciso que fique um registro da primeira tabela, um da segunda, outro da primeira, outro da segunda, outro da primeira.... e assim sucessivamente...

    No aguardo,


    Eder Pardeiro
    sexta-feira, 7 de outubro de 2011 00:25