MySQL - 操作数应包含1列

73 mysql sql mysql-error-1241

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

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
Run Code Online (Sandbox Code Playgroud)

":cat"由我的PHP代码绑定,因为我正在使用PDO.2是":cat"的有效值.

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

让我感到困惑的是,我认为这个查询没有问题.选择列,然后从另一个表中再选择两个,然后从那里继续.我只是无法弄清楚问题是什么.

是否有一个简单的解决方法,或其他方式来编写我的查询?

cdh*_*wie 84

您的子查询正在选择两列,而您正在使用它来投影一列(作为外部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
Run Code Online (Sandbox Code Playgroud)


sil*_*ire 11

如果您不小心使用逗号而不是AND在以下ON子句中使用逗号,也会发生此错误JOIN:

JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
                                                        ^
                                             should be AND, not a comma
Run Code Online (Sandbox Code Playgroud)


Ry-*_*Ry- 5

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)
Run Code Online (Sandbox Code Playgroud)

好吧,你不能从一个子查询中获得多个列.幸运的是,第二栏已经是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)
...
Run Code Online (Sandbox Code Playgroud)


jay*_*iya 5

如果不小心在子句中使用=而不是,也会发生此错误:INWHERE

例如:

WHERE product_id = (1,2,3);
Run Code Online (Sandbox Code Playgroud)

  • 如果将 SELECT 子句中的字段放在括号中,也可能会发生这种情况,例如 SELECT (Field1, Field2) FROM Table (2认同)

Mau*_*tti 5

就我而言,问题是我错误地用括号包围了我的列选择:

SELECT (p.column1, p.colum2, p.column3) FROM table1 p where p.column1 = 1;
Run Code Online (Sandbox Code Playgroud)

并且必须是:

SELECT p.column1, p.colum2, p.column3 FROM table1 p where p.column1 = 1;
Run Code Online (Sandbox Code Playgroud)

听起来很傻,但它导致了这个错误,需要一些时间才能弄清楚。

  • 我不敢相信这就是我的问题,我认为括号在那里是合法的 (4认同)