首页 > 数据库 > mysql教程 > 为什么我的 MySQL INSERT-SELECT 查询返回'操作数应包含 1 列”?

为什么我的 MySQL INSERT-SELECT 查询返回'操作数应包含 1 列”?

Susan Sarandon
发布: 2024-12-20 08:43:10
原创
199 人浏览过

Why Does My MySQL INSERT-SELECT Query Return

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板