MySQL 錯誤「操作數應包含 1 列」的解法
本文將解決 MySQL 查詢中出現的「運算元應包含 1 列(s)」錯誤。此錯誤通常發生在子查詢傳回多列,而外層查詢只期望單列的情況。
錯誤理解:
「運算元應包含 1 列(s)」錯誤表示運算元(此處為子查詢)預期傳回單列,但實際傳回多列,導致列數不符。
問題解決:
可以透過修改查詢,確保子查詢只傳回單列來解決此問題。主要有兩種方法:
1. 使用 JOIN:
避免使用子查詢,直接使用 JOIN
將 users
表與 posts
表連接在 posted_by
欄位上。此方法在選擇 users
表中的特定欄位時更具彈性。
<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>
2. 從子查詢中選擇單列:
或者,可以使用 GROUP BY
子句修改子查詢使其只傳回單一欄位。但是,如果多個使用者俱有相同的 ID,此方法可能會導致資料遺失。
<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 FROM users WHERE users.id = posts.posted_by GROUP BY users.id) AS posted_by FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id WHERE topics.cat_id = :cat GROUP BY topics.id</code>
選擇哪種方法取決於您的特定需求和資料結構。 第一種方法 (使用 JOIN) 通常是更有效率且更清晰的解決方案。
以上是如何修復「操作數應包含 1 列」MySQL 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!