uma - update sql exemplo




Como fazer INSERT em uma tabela de registros extraídos de outra tabela (6)

Bem, eu acho que a melhor maneira seria (será?) Definir dois conjuntos de registros e usá-los como intermediários entre as duas tabelas.

  1. Abra os dois conjuntos de registros
  2. Extraia os dados da primeira tabela (SELECT blablabla)
  3. Atualizar o segundo conjunto de registros com dados disponíveis no primeiro conjunto de registros (adicionando novos registros ou atualizando os registros existentes
  4. Feche os dois conjuntos de registros

Esse método é particularmente interessante se você planeja atualizar tabelas de bancos de dados diferentes (ou seja, cada conjunto de registros pode ter sua própria conexão ...)

Eu estou tentando escrever uma consulta que extrai e transforma dados de uma tabela e insira esses dados em outra tabela. Sim, esta é uma consulta de data warehousing e estou fazendo isso no MS Access. Então, basicamente, eu quero alguma consulta como esta:

INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
  (SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);

Eu tentei, mas recebi uma mensagem de erro de sintaxe.

O que você faria se quisesse fazer isso?


Eu acredito que o seu problema nesta instância é a palavra-chave "valores". Você usa a palavra-chave "values" quando está inserindo apenas uma linha de dados. Para inserir os resultados de um select, você não precisa dele.

Além disso, você realmente não precisa dos parênteses ao redor da instrução select.

De msdn :

Consulta de anexação de vários registros:

INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression

Consulta de acréscimo de registro único:

INSERT INTO target [(field1[, field2[, …]])]     
VALUES (value1[, value2[, …])

Remova os VALUES do seu SQL.


Remova os dois VALORES e os parênteses.

INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1

Você deseja inserir extração em uma tabela existente?

Se não importa, então você pode tentar a consulta abaixo:

SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 
GROUP BY LongIntColumn1);

Ele criará uma nova tabela -> T1 com as informações extraídas


Você tem duas opções de sintaxe:

Opção 1

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

CREATE TABLE Table2 (
    id int identity(1, 1) not null,
    LongIntColumn2 int,
    CurrencyColumn2 money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)

INSERT INTO Table2
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1

opção 2

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)


SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1
INTO Table2
FROM Table1
GROUP BY LongIntColumn1

Tenha em mente que a Opção 2 criará uma tabela com apenas as colunas na projeção (aquelas no SELECT).







ms-access