Rumah > pangkalan data > tutorial mysql > Mengapa Pertanyaan MySQL Saya Mengembalikan Ralat 'Operand harus mengandungi 1 lajur'?

Mengapa Pertanyaan MySQL Saya Mengembalikan Ralat 'Operand harus mengandungi 1 lajur'?

Susan Sarandon
Lepaskan: 2025-01-12 15:26:43
asal
498 orang telah melayarinya

Why Does My MySQL Query Return an

Ralat MySQL: betulkan isu "operand harus mengandungi 1 lajur"

Dalam pertanyaan MySQL anda, anda mengalami ralat "Operand harus mengandungi 1 lajur". Ralat ini biasanya berlaku apabila subkueri mengembalikan berbilang lajur, tetapi pertanyaan luar hanya menjangkakan satu lajur di lokasi tersebut.

Ralat pemahaman:

Pertanyaan ralat mengandungi subkueri:

<code class="language-sql">(SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)</code>
Salin selepas log masuk

Subkueri ini mendapatkan semula dua lajur, "disiarkan_oleh" dan "disiarkan_oleh_id". Walau bagaimanapun, anda menggunakan subkueri ini sebagai satu lajur dalam pertanyaan luar:

<code class="language-sql">COUNT( posts.solved_post ) AS solved_post,
(SUBQUERY)</code>
Salin selepas log masuk

Ketidakkonsistenan ini mengakibatkan ralat "operand harus mengandungi 1 lajur" kerana pertanyaan luar menjangkakan satu lajur di lokasi ini.

Penyelesaian:

Kaedah 1: Gunakan sambungan jadual

Untuk menyelesaikan masalah ini, pertimbangkan untuk menyertai jadual "pengguna" secara langsung dan bukannya menggunakan subkueri. Ini akan membolehkan anda memilih secara eksplisit lajur "posted_by" dan "posted_by_id" tanpa melanggar kekangan lajur tunggal.

<code class="language-sql">SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id

FROM topics

LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by

WHERE topics.cat_id = :cat
GROUP BY topics.id</code>
Salin selepas log masuk

Kaedah 2: Pilih satu lajur daripada subkueri

Sebagai alternatif, jika anda berkeras untuk menggunakan subkueri, anda boleh mengubah suainya untuk hanya mengembalikan lajur yang diperlukan. Sebagai contoh, anda boleh mendapatkan hanya lajur "disiarkan_oleh":

<code class="language-sql">(SELECT users.username AS posted_by
    FROM users
    WHERE users.id = posts.posted_by)</code>
Salin selepas log masuk

Dengan memilih satu lajur dalam subkueri, anda memastikan ia memenuhi keperluan lajur tunggal pertanyaan luar.

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

sumber:php.cn
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