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á vinculado por mi código PHP ya que 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 desconcierta es que pensaría que esta consulta funcionaría sin problemas. Seleccionar columnas, luego seleccionar dos más de otra tabla y continuar desde allí. Simplemente no puedo entender cuál es el problema.
¿Existe una solución simple para esto u otra forma de escribir mi consulta?
fuente
COUNT()
está tirando un poco las cosas; la consulta que he dado probablemente dará un error debido a la agregación. Es posible que deba mover esa agregación a una subconsulta, según los objetivos de su consulta (que no me quedan claros en este momento).Este error también puede ocurrir si accidentalmente usa comas en lugar de
AND
en laON
cláusula de aJOIN
:fuente
Este error también puede ocurrir si accidentalmente usa en
=
lugar deIN
en laWHERE
cláusula:POR EJEMPLO:
fuente
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 puede obtener múltiples columnas de una subconsulta como esa. ¡Afortunadamente, la segunda columna ya está
posts.posted_by
! Entonces: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) ...
fuente
En mi caso, el problema fue que rodeé mi selección de columnas entre paréntesis por error:
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;
Y tiene que ser:
SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;
Suena tonto, pero estaba causando este error y tomó algún tiempo resolverlo.
fuente
Otro lugar en el que puede ocurrir este error es la asignación de un valor que tiene una coma fuera de una cadena. Por ejemplo:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
fuente
Este error también puede ocurrir si accidentalmente pierde
if
nombre de la función.por ejemplo:
set v_filter_value = 100; select f_id, f_sale_value from t_seller where f_id = 5 and (v_filter_value <> 0, f_sale_value = v_filter_value, true);
¡Tengo este problema cuando no puse if en la
if
función!fuente
(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)
Aquí utiliza la subconsulta, pero esta subconsulta debe devolver solo una columna. Sepárelo, de lo contrario, mostrará un error.
fuente
Recibí este error al ejecutar un script MySQL en una consola Intellij, debido a que agregué corchetes en el lugar equivocado:
INCORRECTO:
SELECT user.id FROM user WHERE id IN (:ids); # Do not put brackets around list argument
CORRECTO:
SELECT user.id FROM user WHERE id IN :ids; # No brackets is correct
fuente