MySQL - 操作数应包含 1 列

新手上路,请多包涵

在我正在创建的系统上工作时,我尝试在我的项目中使用以下查询:

 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

”:cat” 在我使用 PDO 时受我的 PHP 代码的约束。 2 是 “:cat” 的有效值。

该查询虽然给了我一个错误:“#1241 - 操作数应包含 1 列”

让我难过的是,我认为这个查询不会有问题。选择列,然后从另一个表中再选择两个,然后从那里继续。我只是无法弄清楚问题是什么。

是否有一个简单的解决方法,或者另一种方法来编写我的查询?

原文由 user1543386 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 655
2 个回答

您的子查询正在选择两列,而您正在使用它来投影一列(作为外部 SELECT 子句的一部分)。在此上下文中,您只能从此类查询中选择一列。

考虑改为加入 users 表;从 users 中选择所需的列时,这将为您提供更大的灵活性。

 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

原文由 cdhowie 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在制作公司数据库时也有同样的问题。这是代码

SELECT FNAME,DNO FROM EMP
 WHERE SALARY IN (SELECT MAX(SALARY), DNO
FROM EMP GROUP BY DNO);

原文由 Silly Devil 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题