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.
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.
Ralat ini boleh diselesaikan dengan melaraskan struktur pertanyaan anda. Berikut ialah dua pendekatan yang berkesan:
<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>
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!