Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL Saya Mengembalikan 'Operand harus mengandungi 1 lajur' dan Bagaimana Saya Boleh Membetulkannya?
Ralat pertanyaan MySQL: "Operand harus mengandungi 1 lajur"
Penerangan masalah:
Semasa melaksanakan pertanyaan MySQL yang menggabungkan berbilang jadual dan mengandungi subkueri (memilih lajur daripada jadual lain), ralat berlaku: "#1241 - Operand harus mengandungi 1 lajur".
Pertanyaan:
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by) FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id WHERE topics.cat_id = :cat GROUP BY topics.id</code>
Sebab ralat:
Ralat berlaku kerana subkueri memilih dua lajur (users
dan username
) daripada jadual id
dan pertanyaan luar menjangkakan subkueri hanya mengembalikan satu lajur.
Penyelesaian:
Terdapat dua cara untuk menyelesaikan ralat ini:
Ubah suai subkueri:
username
lajur atau id
lajur. Sambung users
jadual:
posted_by
terus ke jadual users
menggunakan lajur posts
. Pendekatan ini memberikan lebih fleksibiliti apabila memilih lajur yang diperlukan daripada jadual users
. Pertanyaan yang diubah suai:
Gunakan subkueri:
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by FROM users WHERE users.id = posts.posted_by) FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id WHERE topics.cat_id = :cat GROUP BY topics.id</code>
Gunakan sambungan:
<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>
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Saya Mengembalikan 'Operand harus mengandungi 1 lajur' dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!