Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL INSERT-SELECT Mengembalikan 'Operand harus mengandungi 1 lajur'?
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!