首頁 > 資料庫 > mysql教程 > 為什麼我的 MySQL 查詢會傳回「運算元應包含 1 列」以及如何修復它?

為什麼我的 MySQL 查詢會傳回「運算元應包含 1 列」以及如何修復它?

Susan Sarandon
發布: 2025-01-12 15:06:47
原創
1002 人瀏覽過

Why Does My MySQL Query Return

MySQL 查詢錯誤:「運算元應包含 1 列」

問題描述:

執行一個連接多個表並包含子查詢(從另一個表中選擇列)的 MySQL 查詢時,發生錯誤:「#1241 - Operand should contain 1 column(s)」。

查詢:

<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>
登入後複製

錯誤原因:

錯誤發生是因為子查詢從 users 表中選擇了兩個欄位(usernameid),而外部查詢期望子查詢只傳回單一欄位。

解:

有兩個方法可以解決此錯誤:

  1. 修改子查詢:

    • 將子查詢修改為只回傳 username 欄位或 id 欄位。
  2. 連接 users 表:

    • 不使用子查詢,而是使用 posted_by 欄位直接將 users 表連接到 posts 表。這種方法在從 users 表中選擇所需列時提供了更大的靈活性。

修改後的查詢:

使用子查詢:

<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>
登入後複製

使用連接:

<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>
登入後複製

以上是為什麼我的 MySQL 查詢會傳回「運算元應包含 1 列」以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板