首頁 > 資料庫 > mysql教程 > 為什麼我的 MySQL INSERT-SELECT 查詢返回「操作數應包含 1 列」?

為什麼我的 MySQL INSERT-SELECT 查詢返回「操作數應包含 1 列」?

Susan Sarandon
發布: 2024-12-20 08:43:10
原創
236 人瀏覽過

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板