首页 > 数据库 > mysql教程 > 为什么我的 MySQL 查询返回'操作数应包含 1 列”错误?

为什么我的 MySQL 查询返回'操作数应包含 1 列”错误?

Susan Sarandon
发布: 2025-01-12 15:26:43
原创
553 人浏览过

Why Does My MySQL Query Return an

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板