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
Lepaskan: 2025-01-12 15:13:45
asal
542 orang telah melayarinya

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

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!

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