MySQL的 - 操作数应包含1列(S)(MySQL - Operand should contai

2019-07-17 14:23发布

当我创建一个系统的工作,我尝试使用下面的查询在我的项目:

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

“:猫”是我的PHP代码绑定为我使用的PDO。 2是一个有效的价值“:猫”。

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

我是什么树桩,我会觉得这个查询将工作没有问题。 选择列,然后从另一个表两种,并从那里继续上。 我只是想不通的问题是什么。

有一个简单的解决这一点,或另一种方式来写我的查询?

Answer 1:

你的子查询中选择两列,当您使用它来预测一列(如外的部分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


Answer 2:

如果你不小心使用逗号,而不是也会出现此错误AND对在ON的条款JOIN

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


Answer 3:

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)
...


Answer 4:

如果你不小心使用,也会出现此错误=代替IN的在WHERE子句:

例如:

WHERE product_id = (1,2,3);


Answer 5:

这个错误可以发生的另一个地方是指派具有字符串之外的逗号的值。 例如:

SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)


文章来源: MySQL - Operand should contain 1 column(s)