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