While working on a system I'm creating, I attempted to use the following query in my project:
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" is bound by my PHP code as I'm using PDO. 2 is a valid value for ":cat".
That query though gives me an error: "#1241 - Operand should contain 1 column(s)"
What stumps me is that I would think that this query would work no problem. Selecting columns, then selecting two more from another table, and continuing on from there. I just can't figure out what the problem is.
Is there a simple fix to this, or another way to write my query?
Well, you can’t get multiple columns from one subquery like that. Luckily, the second column is already
posts.posted_by
! So:Another place this error can happen in is assigning a value that has a comma outside of a string. For example:
This error can also occur if you accidentally use commas instead of
AND
in theON
clause of aJOIN
:This error can also occur if you accidentally use
=
instead ofIN
in theWHERE
clause:FOR EXAMPLE:
Your subquery is selecting two columns, while you are using it to project one column (as part of the outer
SELECT
clause). You can only select one column from such a query in this context.Consider joining to the
users
table instead; this will give you more flexibility when selecting what columns you want fromusers
.