我有两张桌子:
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
)
当我尝试将所有记录从 old_orders 插入到 new_orders 并clientId
使用以下查询自动生成新记录时:
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;
但查询失败并出现以下错误:
表 new_orders 有 17 列,但提供了 16 个值
如何实现这个功能?
new_orders.clientId
是自动增量列,对吧?那么为什么这个查询不起作用?
使用
INSERT
语句时,始终指定要插入的列的名称:如果您未指定要插入的列的列表,则假定您要插入所有列。
new_orders
有 17 列,但您只选择了 16 列的值。即使有一列是自动增量列,它仍将被视为要插入的 17 列之一。此外,当未指定列的列表时,插入的列的顺序就是它们在表中出现的顺序。表中的列的顺序并不相同,因此即使您对列数没有问题,您也会收到有关数据类型不匹配的错误,或者数据最终会出现在错误的列中。
错误信息告诉你:
插入的数据的列必须与目标匹配。
在您的情况下,该列
clientGuid
仅在一个表中,而不在另一个表中。