Tenho duas tabelas:
CREATE TABLE new_orders
(
clientId INTEGER NOT NULL,
exchangeId NOT NULL,
marketId NOT NULL,
id INTEGER NOT NULL,
accountType NOT NULL,
listId INTEGER NOT NULL,
clientGuid NOT NULL,
side NOT NULL,
type NOT NULL,
status NOT NULL,
price NOT NULL,
stopPrice NOT NULL,
amount NOT NULL,
filled NOT NULL,
cost NOT NULL,
createTime NOT NULL,
updateTime NOT NULL,
PRIMARY KEY(clientId)
)
CREATE TABLE old_orders
(
exchangeId NOT NULL,
marketId NOT NULL,
id INTEGER NOT NULL,
accountType NOT NULL,
listId INTEGER NOT NULL,
clientId NOT NULL,
side NOT NULL,
type NOT NULL,
status NOT NULL,
price NOT NULL,
stopPrice NOT NULL,
amount NOT NULL,
filled NOT NULL,
cost NOT NULL,
createTime NOT NULL,
updateTime NOT NULL,
PRIMARY KEY(accountType, marketId, id) WITHOUT ROWID
)
Quando tento inserir todos os registros de old_orders para new_orders e gerar novos clientId
automaticamente com a seguinte consulta:
INSERT INTO new_orders
SELECT clientId AS clientGuid, exchangeId, marketId, id, accountType, listId, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime
FROM old_orders;
mas a consulta falha com o seguinte erro:
A tabela new_orders tem 17 colunas, mas 16 valores foram fornecidos
Como fazer isso funcionar?
new_orders.clientId
é uma coluna de autoincremento, certo? Então por que essa consulta não funciona?
Ao usar uma
INSERT
instrução, sempre especifique os nomes das colunas nas quais você está inserindo:Se você não especificar a lista de colunas que estão sendo inseridas, então é assumido que você está inserindo em todas as colunas.
new_orders
tem 17 colunas, mas você está selecionando apenas valores para 16 colunas. Não importa que uma coluna seja uma coluna de incremento automático, ela ainda será considerada uma das 17 colunas que estão sendo inseridas.Além disso, quando nenhuma lista de colunas é especificada, a ordem das colunas inseridas é a ordem em que elas aparecem na tabela. As colunas em suas tabelas não estão na mesma ordem, então, mesmo que você não tenha um problema com o número de colunas, você obteria um erro sobre tipos de dados incompatíveis, ou os dados acabariam nas colunas erradas.
A mensagem de erro informa:
As colunas nos dados inseridos devem corresponder ao destino.
No seu caso, a coluna
clientGuid
está apenas em uma tabela, mas não na outra.