Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan MySQL Saya Mengembalikan 'Operand harus mengandungi 1 lajur' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Pertanyaan MySQL Saya Mengembalikan 'Operand harus mengandungi 1 lajur' dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2025-01-12 15:06:471007semak imbas

Why Does My MySQL Query Return

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:

  1. Ubah suai subkueri:

    • Ubah suai subkueri untuk mengembalikan hanya username lajur atau id lajur.
  2. Sambung users jadual:

    • Daripada menggunakan subkueri, sertai 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!

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