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