Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL INSERT-SELECT Mengembalikan 'Operand harus mengandungi 1 lajur'?

Mengapa Pertanyaan MySQL INSERT-SELECT Mengembalikan 'Operand harus mengandungi 1 lajur'?

Susan Sarandon
Susan Sarandonasal
2024-12-20 08:43:10208semak imbas

Why Does My MySQL INSERT-SELECT Query Return

Ralat Sintaks MySQL: "Operand harus mengandungi 1 lajur" dalam Pertanyaan INSERT-SELECT

Apabila melaksanakan INSERT-SELECT pertanyaan, MySQL mungkin membuang ralat yang menyatakan "Operand harus mengandungi 1 lajur". Untuk menyelesaikan masalah ini, pertimbangkan perkara berikut:

Sintaks

Sintaks yang betul untuk pertanyaan INSERT-SELECT ialah:

INSERT INTO DestinationTable (DestinationColumns)
SELECT SelectColumns
FROM SourceTable
WHERE Conditions;

Dalam pertanyaan yang disediakan:

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;

括号 dalam klausa SELECT ialah tak betul. Alih keluarnya, menghasilkan:

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;

Saiz Data

Selepas membetulkan sintaks, jika ralat berterusan, pertimbangkan saiz data yang terlibat dalam pertanyaan. MySQL mengehadkan bilangan baris yang boleh dikembalikan oleh pernyataan SELECT (MAX_JOIN_SIZE). Untuk mengelakkan ralat ini untuk set data yang besar, laksanakan:

SET SQL_BIG_SELECTS = 1;

sebelum menjalankan pertanyaan. Ini akan meningkatkan had dan membenarkan pertanyaan untuk dilaksanakan dengan jayanya.

Contoh

Menggunakan sintaks yang diperbetulkan dan menetapkan SQL_BIG_SELECTS, pertanyaan yang diubah suai menjadi:

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;

Laksanakan pertanyaan ini untuk memasukkan data daripada temp_cheques ke dalam meja VOUCHER.

Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL INSERT-SELECT Mengembalikan 'Operand harus mengandungi 1 lajur'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn