Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Operand harus mengandungi 1 lajur' MySQL dalam Subqueries?

Bagaimana untuk Membetulkan Ralat 'Operand harus mengandungi 1 lajur' MySQL dalam Subqueries?

Patricia Arquette
Patricia Arquetteasal
2025-01-12 15:13:45609semak imbas

How to Fix MySQL's

Menyelesaikan masalah "Operand MySQL should contain 1 column(s)" Ralat

Semasa pembangunan pangkalan data, menghadapi ralat MySQL adalah perkara biasa. Satu ralat sedemikian, "'#1241 - Operand harus mengandungi 1 lajur'", kerap timbul apabila menggunakan subkueri yang mengembalikan berbilang lajur. Ini biasanya berlaku apabila subkueri menyediakan lebih daripada satu lajur kepada pertanyaan luar yang menjangkakan satu hasil lajur.

Pecahan Masalah

Mesej ralat menunjukkan ketidakserasian antara bilangan lajur yang dikembalikan oleh subkueri dan jangkaan pertanyaan utama. Pernyataan SELECT luar cuba menggunakan hasil subkueri berbilang lajur seolah-olah ia adalah satu nilai.

Penyelesaian

Ralat ini boleh diselesaikan dengan melaraskan struktur pertanyaan anda. Berikut ialah dua pendekatan yang berkesan:

  1. Direct Table Join: Daripada menyarangkan subkueri, terus sertai jadual yang berkaitan. Ini memberikan lebih kawalan dan fleksibiliti apabila memilih lajur tertentu.
<code class="language-sql">SELECT
    t.id,
    t.name,
    t.post_count,
    t.view_count,
    COUNT(p.solved_post) AS solved_post,
    u.username AS posted_by,
    u.id AS posted_by_id
FROM
    topics t
LEFT OUTER JOIN
    posts p ON p.topic_id = t.id
LEFT OUTER JOIN
    users u ON u.id = p.posted_by
WHERE
    t.cat_id = :cat
GROUP BY
    t.id;</code>
  1. Subquery Lajur Tunggal: Jika anda lebih suka mengekalkan subquery, ubah suai untuk mengembalikan satu lajur sahaja. Ini mungkin melibatkan penggunaan fungsi agregat (seperti MAX(), MIN(), AVG()) atau memilih lajur tertentu daripada jadual users.
<code class="language-sql">SELECT
    t.id,
    t.name,
    t.post_count,
    t.view_count,
    COUNT(p.solved_post) AS solved_post,
    (SELECT u.username FROM users u WHERE u.id = p.posted_by) AS posted_by_username
FROM
    topics t
LEFT OUTER JOIN
    posts p ON p.topic_id = t.id
GROUP BY
    t.id;</code>

Dengan melaksanakan salah satu daripada penyelesaian ini, anda akan membetulkan ralat operan dan mendapatkan semula data yang diperlukan daripada pangkalan data MySQL anda dengan tepat. Memilih penyelesaian terbaik bergantung pada keperluan data khusus anda dan reka bentuk pertanyaan.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Operand harus mengandungi 1 lajur' MySQL dalam Subqueries?. 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