MySQL-操作数应包含1列

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

在开发我正在创建的系统时,我试图在我的项目中使用以下查询:

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”被我的PHP代码绑定,因为我使用的是PDO。2是“:CAT”的有效值。

不过,该查询给出了一个错误:“#1241-操作数应该包含1列(S)”。

令我沮丧的是,我会认为这个查询没有问题。选择列,然后从另一个表中再选择两个列,然后从那里继续。我就是搞不懂是什么问题。

对此是否有简单的修复,或者用另一种方式编写我的查询?

提问于
用户回答回答于

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

考虑加入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
用户回答回答于

如果你不小心使用逗号而不是ANDONa的子句JOIN:

JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
                                                        ^
                                             should be AND, not a comma

扫码关注云+社区