MySQL – 操作数应该包含1列(s)
在我正在创build的系统上工作时,我试图在我的项目中使用以下查询:
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
当我使用PDO时,“cat”被我的PHP代码绑定。 2是“:cat”的有效值。
该查询虽然给我一个错误:“#1241 – 操作数应该包含1列(S)”
困扰我的是我认为这个查询不会有问题。 select列,然后从另一个表中select两个,然后从那里继续。 我只是无法弄清楚问题所在。
有没有一个简单的修复,或者另一种方式来写我的查询?
您的子查询select了两列,而您正在使用它来投影一列(作为外部SELECT
子句的一部分)。 在这种情况下,您只能从这样的查询中select一列。
考虑joinusers
表,而不是; 这将使您在selectusers
需要的列时有更大的灵活性。
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
如果您意外地在JOIN
的ON
子句中使用逗号而不是AND
,则也会发生此错误:
JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2) ^ should be AND, not a comma
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)
那么,你不能从一个子查询中得到多个列。 幸运的是,第二列已经是posts.posted_by
! 所以:
SELECT topics.id, topics.name, topics.post_count, topics.view_count, posts.posted_by COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by_username FROM users WHERE users.id = posts.posted_by) ...
如果您在WHERE子句中意外地使用'='而不是'IN',也会出现此错误:
例如:
WHERE product_id = (1,2,3);