MySQL 语法错误:INSERT-SELECT 查询中的“操作数应包含 1 列”
执行 INSERT-SELECT 时查询时,MySQL 可能会抛出错误,指出“操作数应包含 1 列”。要解决此问题,请考虑以下事项:
语法
INSERT-SELECT 查询的正确语法是:
INSERT INTO DestinationTable (DestinationColumns) SELECT SelectColumns FROM SourceTable WHERE Conditions;
在提供的查询:
INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT (a.number, b.ID, b.DENOMINATION) FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
SELECT 子句中的逗号不正确。删除它们,得到:
INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT a.number, b.ID, b.DENOMINATION FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
数据大小
更正语法后,如果错误仍然存在,请考虑查询中涉及的数据大小。 MySQL 限制 SELECT 语句可以返回的行数 (MAX_JOIN_SIZE)。要避免大型数据集出现此错误,请在运行查询之前执行:
SET SQL_BIG_SELECTS = 1;
。这将增加限制并允许查询成功执行。
示例
使用更正的语法并设置 SQL_BIG_SELECTS,修改后的查询将变为:
SET SQL_BIG_SELECTS = 1; INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT a.number, b.ID, b.DENOMINATION FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
执行此查询将 temp_cheques 中的数据插入到 VOUCHER 中表。
以上是为什么我的 MySQL INSERT-SELECT 查询返回'操作数应包含 1 列”?的详细内容。更多信息请关注PHP中文网其他相关文章!