una than tener solucion should returns operando more espaƱol error documentaciĆ³n dicho debe columna column code mysql sql mysql-error-1241

mysql - than - operand should contain 1 column(s)



MySQL-El operando debe contener 1 columna(s) (4)

Mientras trabajaba en un sistema que estoy creando, intenté usar la siguiente consulta en mi proyecto:

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" está sujeto a mi código PHP porque estoy usando PDO. 2 es un valor válido para ": cat".

Sin embargo, esa consulta me da un error: "# 1241 - El operando debe contener 1 columna (s)"

Lo que me sorprende es que creo que esta consulta funcionaría sin problemas. Seleccionando columnas, luego seleccionando dos más de otra tabla, y continuando desde allí. Simplemente no puedo entender cuál es el problema.

¿Hay una solución simple para esto u otra forma de escribir mi consulta?


Este error también puede ocurrir si accidentalmente usa = lugar de IN en la cláusula WHERE :

POR EJEMPLO:

WHERE product_id = (1,2,3);


Este error también puede ocurrir si accidentalmente usa comas en lugar de AND en la cláusula ON de JOIN :

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


Su subconsulta consiste en seleccionar dos columnas, mientras la usa para proyectar una columna (como parte de la cláusula SELECT externa). Solo puede seleccionar una columna de dicha consulta en este contexto.

Considere unirse a la tabla de users lugar; esto le dará más flexibilidad al seleccionar qué columnas quiere de los 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


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)

Bueno, no puedes obtener varias columnas de una subconsulta como esa. Afortunadamente, la segunda columna ya está posts.posted_by ! Asi que:

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