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
Lepaskan: 2024-12-20 08:43:10
asal
236 orang telah melayarinya

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;
Salin selepas log masuk

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;
Salin selepas log masuk

括号 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;
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan