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
Lepaskan: 2025-01-12 15:06:47
asal
1068 orang telah melayarinya

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

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

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

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!

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