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

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

Susan Sarandon
Susan Sarandon原創
2024-12-20 08:43:10142瀏覽

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