MySQL 錯誤:解決「操作數應包含 1 列」問題
在你的 MySQL 查詢中,你遇到了「運算元要包含 1 個欄位」的錯誤。這個錯誤通常發生在子查詢傳回多個列,而外層查詢在該位置只期望單列的情況。
理解錯誤:
出錯的查詢包含一個子查詢:
<code class="language-sql">(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)</code>
這個子查詢檢索兩列,「posted_by」 和 「posted_by_id」。但是,你在外層查詢中將這個子查詢用作單列:
<code class="language-sql">COUNT( posts.solved_post ) AS solved_post, (SUBQUERY)</code>
這種不一致導致了「操作數應包含 1 列」的錯誤,因為外層查詢在這個位置期望一個單列。
解決方法:
方法一:使用表格連接
為了解決這個問題,考慮直接連接 "users" 表,而不是使用子查詢。這將允許你明確地選擇 "posted_by" 和 "posted_by_id" 列,而不會違反單列約束。
<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>
方法二:從子查詢中選擇單列
或者,如果你堅持使用子查詢,你可以修改它只回傳所需的欄位。例如,你可以只檢索 "posted_by" 欄位:
<code class="language-sql">(SELECT users.username AS posted_by FROM users WHERE users.id = posts.posted_by)</code>
透過在子查詢中選擇單列,你可以確保它符合外層查詢的單列要求。
以上是為什麼我的 MySQL 查詢回傳「操作數應包含 1 列」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!