INSERT INTO COM VARIOS SELECT

 Tópico anterior Próximo tópico Novo tópico

INSERT INTO COM VARIOS SELECT

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#470185 - 29/12/2016 17:11:50

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Última edição em 29/12/2016 17:15:40 por WEBIER

Criei um topico recente (que fechei), onde formos parar nesse dilema...

Todo mundo sabe que um INSERT INTO pode ser preenchido com uma SELECT,

Exemplo:
INSERT INTO TBdestina ( campo01, campo02) SELECT campoX, CampoY FROM TBOrigem_A


A minha duvida é usar 02 ou mais Select para selecionar dados de 02 ou mais tabelas... se é possivel

INSERT INTO TBdestina ( campo01, campo02) SELECT (SELECT campoX FROM TBOrigem_A) as varCampoA, (SELECT campoY FROM TBOrigem_B) as varCampoB

vejam que a tabela TBDestina tá sendo preenchida com 2 tabelas distintas...
É possivel fazer isso? é dessa forma que eu dê o exemplo?




#470187 - 29/12/2016 18:04:00

SINCLAIR
CRICIUMA
Cadast. em:Janeiro/2001


Última edição em 29/12/2016 18:05:18 por SINCLAIR

WEBIER,


Não conheço a sintaxe do banco de dados que você usa.

De qualquer forma, o campo de origem pode ser um select que reúna apenas um campo de uma tabela ou cruzamento delas.

Exemplo


INSERT INTO

          Tab_Destino

                    (campo_01 , campo 02)
                  
          Values

                    (     select campo_A from Alguma_Tabela where ( x = y )     )   ,
                    (     select campo_B from Outra_Tabela where ( x = y ) and ( a = b )     )





Euzébio Cruz
Criciúma - SC


Resposta escolhida #470188 - 29/12/2016 19:16:05

LVFIOROT
SERRA
Cadast. em:Março/2012


no mssql > union all

select  c1, c2 from tb1
union all
select  c1, c2 from tb2



#470189 - 29/12/2016 20:20:34

WEBIER
URUCUI
Cadast. em:Dezembro/2003


 Anexos estao visíveis somente para usuários registrados

fiz assim:

sSQL = "INSERT INTO NotaFiscalItens ( " & _
        "CodigoProduto, " & _
        "NomeProduto) " & _
        "VALUES " & _
        "(SELECT pedidos_itens.cod_produto FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & ") as varCodProduto, " & _
        "(SELECT pedidos_itens.descricao FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & ") as varNomeProduto ;"

Uso SQL 2008 Express

Deu o erro da imagem acima



#470190 - 29/12/2016 21:57:20

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O que você está tentando se chama subquery. Cada uma delas retorna um valor. A cláusula Values do comando Insert, deve ser especificada entre parênteses, portanto:

Insert Into Tabela (campo1, campo2, campo3)
values(
       (select campo1 from outraTabela inner join terceiraTabela on outraTabela.campoA = terceiraTabela.campoB Where x = y),
       (select campo1 from outraTabela inner join terceiraTabela on outraTabela.campoA = terceiraTabela.campoB Where x = y),
       (select campo1 from outraTabela inner join terceiraTabela on outraTabela.campoA = terceiraTabela.campoB Where x = y),
)


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470192 - 30/12/2016 07:44:29

SINCLAIR
CRICIUMA
Cadast. em:Janeiro/2001


WEBIER,

Nosso colega KERPLUNK tem razão, a cláusula values precisa estar entre parêntesis (ou parênteses, ambas palavras estão corretas). No meu exemplo não coloquei porque imaginei que você faria isto, durante a adaptação.

No exemplo que citei acima, portanto, ficaria assim:


INSERT INTO

          Tab_Destino

                    (campo_01 , campo 02)
                  
          Values

                    (

                              (     select campo_A from Alguma_Tabela where ( x = y )     )   ,
                              (     select campo_B from Outra_Tabela where ( x = y ) and ( a = b )     )

                    )



Apenas colocando os parêntesis faltantes, sem avaliar a sintaxe de seu código:


sSQL = "INSERT INTO NotaFiscalItens ( " & _
        "CodigoProduto, " & _
        "NomeProduto) " & _
        "VALUES (" & _
        "(SELECT pedidos_itens.cod_produto FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & ") as varCodProduto, " & _
        "(SELECT pedidos_itens.descricao FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & ") as varNomeProduto) ;"


Euzébio Cruz
Criciúma - SC


#470196 - 30/12/2016 11:43:12

PLUGSOFTSM
SANTA MARIA
Cadast. em:Julho/2015


sSQL = "INSERT INTO NotaFiscalItens ( CodigoProduto, NomeProduto) VALUES
SELECT pedidos_itens.cod_produto, pedidos_itens.descricao FROM  (pedidos_itens INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido)
WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text

Notas: Por que vc usa a tabela produtos na consulta, uma vez que nenhum dado extraido dela é usado para o seu insert;
          Imaginando-se que teu insert use outros valoes que venham da tabela produtos e você não citou, e vc precise referenciar a tabela produtos, a tua consulta ficaria assim


sSQL = "INSERT INTO NotaFiscalItens ( CodigoProduto, NomeProduto, Valor1_Produto, Valor2_Produto) VALUES
SELECT pedidos_itens.cod_produto, pedidos_itens.descricao, Produtos.Valor1_Produto, Produtos.Valor2_Produtos
FROM  ((pedidos_itens INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido) Left Join Produtos On
produtos.codigo = pedidos_itens.cod_produto) WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text



#470197 - 30/12/2016 12:21:45

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Última edição em 30/12/2016 12:43:30 por WEBIER

 Anexos estao visíveis somente para usuários registrados

fiz conforme o SINCLAIR postou, se houver somente 1 registro... FUNCIONA NORMAL... se for varios registros, retorna o erro acima

sSQL = "INSERT INTO NotaFiscalItens ( " & _
         "CodigoProduto, " & _
         "NomeProduto) " & _
        "VALUES (" & _
        "(SELECT produtos.codigo FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & "), " & _
        "(SELECT produtos.descricao FROM produtos INNER JOIN pedidos_itens ON produtos.codigo = pedidos_itens.cod_produto INNER JOIN pedidos ON pedidos_itens.cod_pedido = pedidos.cod_pedido WHERE pedidos_itens.COD_PEDIDO = " & txtCodPedido.Text & ") );"



Me perguntaram pq tou fazendo um INSERT INTO com varios SELECT... é pq no campo VALUES vou usar dados de 2 tabelas e de objeto do form

no final vai ficar assim:  
sSQL = "INSERT INTO TB_Destino ( " & _
               "Campo1, " & _
                "Campo2, " & _
                "Campo3, " & _
                "Campo4) " & _
        "VALUES (" & _
                "(SELECT CampoX FROM TB_01  WHERE A = B), " & _
                "(SELECT CampoX FROM TB_01  WHERE A = B), " & _
                "(SELECT CampoY FROM TB_02  WHERE A = B), " & _
                " " & Val(TEXT1.Text) & " " & _
         " );"





#470198 - 30/12/2016 12:43:00

LVFIOROT
SERRA
Cadast. em:Março/2012


como eu disse...

  

INSERT INTO [dbo].[tb1]
           ([c1]
           ,[c2])
    SELECT TOP (1000) [c1]
          ,[c2]
      FROM [teste].[dbo].[tb2]
    union all
    SELECT TOP (1000) [c1]
          ,[c2]
      FROM [teste].[dbo].[tb3]




#470199 - 30/12/2016 12:49:15

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Última edição em 30/12/2016 13:39:45 por WEBIER

Citação:
:
como eu disse...

  

INSERT INTO [dbo].[tb1]
           ([c1]
           ,[c2])
    SELECT TOP (1000) [c1]
          ,[c2]
      FROM [teste].[dbo].[tb2]
    union all
    SELECT TOP (1000) [c1]
          ,[c2]
      FROM [teste].[dbo].[tb3]


Bom dia, LVFIOROT

Será se o union all aplica-se ao que eu quero?

Quero pegar registros da tabela Produtos relacionar com a tabela PEDIDO_ITENS, quero pegar registros de mais outra tabela... e pegar dados exibidos no form (text1)... e com esses dados preencher 1 ou mais registros na tabela NotaFiscalItens

resumidamente isso:
sSQL = "INSERT INTO TB_Destino ( " & _
               "Campo1, " & _
                "Campo2, " & _
                "Campo3, " & _
                "Campo4) " & _
        "VALUES (" & _
                "(SELECT CampoX FROM TB_01  WHERE A = B), " & _
                "(SELECT CampoX FROM TB_01  WHERE A = B), " & _
                "(SELECT CampoY FROM TB_02  WHERE A = B), " & _
                " " & Val(TEXT1.Text) & " " & _
         " );"





#470201 - 30/12/2016 14:01:36

LVFIOROT
SERRA
Cadast. em:Março/2012


teste e veja vc mesmo......





 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por WEBIER em 11/01/2017 07:16:25