Работая над системой, которую я создаю, я попытался использовать в своем проекте следующий запрос:
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" привязан к моему PHP-коду, поскольку я использую PDO. 2 - допустимое значение для ": cat".
Однако этот запрос дает мне ошибку: "# 1241 - Операнд должен содержать 1 столбец (и)"
Что меня озадачивает, так это то, что я думаю, что этот запрос будет работать без проблем. Выбор столбцов, затем выбор еще двух из другой таблицы и продолжение оттуда. Я просто не могу понять, в чем проблема.
Есть ли простое исправление этого или другой способ написать мой запрос?
источник
COUNT()
это немного сбивает с толку; запрос, который я дал, вероятно, выдаст ошибку из-за агрегирования. Возможно, вам придется переместить эту агрегацию в подзапрос, в зависимости от целей вашего запроса (которые мне пока не ясны).Эта ошибка также может произойти , если вы случайно использовать запятые вместо
AND
вON
предложении о наличииJOIN
:источник
Эта ошибка также может возникнуть, если вы случайно используете
=
вместо предложенияIN
вWHERE
предложении:НАПРИМЕР:
источник
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) ...
источник
В моем случае проблема заключалась в том, что я по ошибке заключил свой выбор столбцов круглыми скобками:
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;
И должно быть:
SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;
Звучит глупо, но это было причиной этой ошибки, и потребовалось некоторое время, чтобы понять ее.
источник
Еще одно место, где может произойти эта ошибка, - это присвоение значения с запятой вне строки. Например:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
источник
Эта ошибка также может возникнуть, если вы случайно пропустили
if
имя функции.например:
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);
Возникла эта проблема, когда я пропустил, если в
if
функции!источник
(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)
Здесь вы используете подзапрос, но этот подзапрос должен возвращать только один столбец. Отделите его, иначе будет отображаться ошибка.
источник
Я получил эту ошибку при выполнении сценария MySQL в консоли Intellij из-за добавления скобок не в том месте:
НЕПРАВИЛЬНО:
SELECT user.id FROM user WHERE id IN (:ids); # Do not put brackets around list argument
ВЕРНО:
SELECT user.id FROM user WHERE id IN :ids; # No brackets is correct
источник