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