INSERT INTO COM VARIOS SELECT
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:
A minha duvida é usar 02 ou mais Select para selecionar dados de 02 ou mais tabelas... se é possivel
INSERT INTO [txt-color=#e80000]TBdestina ( campo01, campo02)[/txt-color] SELECT (SELECT campoX FROM TBOrigem_[txt-color=#e80000]A[/txt-color]) as varCampoA, (SELECT campoY FROM TBOrigem_[txt-color=#e80000]B[/txt-color]) as varCampoB
vejam que a tabela TBDestina tá sendo preenchida com 2 tabelas distintas...
é possivel fazer isso? é dessa forma que eu dê o exemplo?
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 [txt-color=#e80000]TBdestina ( campo01, campo02)[/txt-color] SELECT (SELECT campoX FROM TBOrigem_[txt-color=#e80000]A[/txt-color]) as varCampoA, (SELECT campoY FROM TBOrigem_[txt-color=#e80000]B[/txt-color]) as varCampoB
vejam que a tabela TBDestina tá sendo preenchida com 2 tabelas distintas...
é possivel fazer isso? é dessa forma que eu dê o exemplo?
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
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 ) )
no mssql > union all
select c1, c2 from tb1
union all
select c1, c2 from tb2
select c1, c2 from tb1
union all
select c1, c2 from tb2
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
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
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),
)
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:
Apenas colocando os parêntesis faltantes, sem avaliar a sintaxe de seu código:
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 [txt-color=#e80000]([/txt-color][Ô] & _
[Ô](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[txt-color=#e80000])[/txt-color] ;[Ô]
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
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
fiz conforme o SINCLAIR postou, se houver somente 1 registro... FUNCIONA NORMAL... se for varios registros, retorna o erro acima
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 ( [Ô] & _
[Ô][txt-color=#e80000]Campo1[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0]Campo2[/txt-color], [Ô] & _
[Ô][txt-color=#007100]Campo3[/txt-color], [Ô] & _
[Ô][txt-color=#8A2BE2]Campo4[/txt-color]) [Ô] & _
[Ô]VALUES ([Ô] & _
[Ô][txt-color=#e80000](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#007100](SELECT CampoY FROM TB_02 WHERE A = B)[/txt-color], [Ô] & _
[Ô] [txt-color=#8A2BE2][Ô] & Val(TEXT1.Text) & [Ô][/txt-color] [Ô] & _
[Ô] );[Ô]
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 ( [Ô] & _
[Ô][txt-color=#e80000]Campo1[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0]Campo2[/txt-color], [Ô] & _
[Ô][txt-color=#007100]Campo3[/txt-color], [Ô] & _
[Ô][txt-color=#8A2BE2]Campo4[/txt-color]) [Ô] & _
[Ô]VALUES ([Ô] & _
[Ô][txt-color=#e80000](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#007100](SELECT CampoY FROM TB_02 WHERE A = B)[/txt-color], [Ô] & _
[Ô] [txt-color=#8A2BE2][Ô] & Val(TEXT1.Text) & [Ô][/txt-color] [Ô] & _
[Ô] );[Ô]
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]
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 ( [Ô] & _
[Ô][txt-color=#e80000]Campo1[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0]Campo2[/txt-color], [Ô] & _
[Ô][txt-color=#007100]Campo3[/txt-color], [Ô] & _
[Ô][txt-color=#8A2BE2]Campo4[/txt-color]) [Ô] & _
[Ô]VALUES ([Ô] & _
[Ô][txt-color=#e80000](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#0000f0](SELECT CampoX FROM TB_01 WHERE A = B)[/txt-color], [Ô] & _
[Ô][txt-color=#007100](SELECT CampoY FROM TB_02 WHERE A = B)[/txt-color], [Ô] & _
[Ô] [txt-color=#8A2BE2][Ô] & Val(TEXT1.Text) & [Ô][/txt-color] [Ô] & _
[Ô] );[Ô]
teste e veja vc mesmo......
Tópico encerrado , respostas não são mais permitidas