Следующее отображает правильный вывод.
(
SELECT
answer_data
FROM
wp_learndash_pro_quiz_statistic_ref b, wp_learndash_pro_quiz_statistic bb
WHERE
wp_users.id = b.user_id
AND b.statistic_ref_id = bb.statistic_ref_id
AND bb.question_id = 82
AND b.quiz_id = 9) AS "xyz"
Но когда я меняю bb.question_id = 82 на любой другой question_id (т.е. 56 — это другой вопрос), я получаю эту ошибку:
" MySQL сказал: Документация #1242 - Подзапрос возвращает более 1 строки"
Любая идея, что я делаю неправильно?
Можете ли вы поделиться полным запросом? Похоже, вы используете результат вышеуказанного запроса в другом.
Вы пытались сделать limit 1
в конце, если хотите получить только одну строку из подзапроса?
Сообщение об ошибке понятно и говорит вам, что ваш подзапрос, который должен вернуть одно скалярное значение, возвращает более одной строки. Либо логика неверна, либо ее нужно изменить, чтобы она возвращала только одно значение, возможно, с помощью LIMIT
.
Отвечает ли это на ваш вопрос? подзапрос возвращает более 1 строки
Это просто означает, что для bb.question_id = 82
доступно несколько записей, и вы должны были использовать его в предложении SELECT
или с оператором =
в предложении WHERE
, где ожидается одно значение.
LIMIT 1
, чтобы получить только одну запись из нескольких записей.Использовать это:
(SELECT MAX(answer_data)
FROM wp_learndash_pro_quiz_statistic_ref b
JOIN wp_learndash_pro_quiz_statistic bb
ON wp_users.id = b.user_id
AND b.statistic_ref_id = bb.statistic_ref_id
WHERE bb.question_id = 82
AND b.quiz_id = 9) AS "xyz"
Совет дня: всегда используйте стандартные соединения ANSI.
Выполните его как один запрос (удалите скобки и последний псевдоним) и подсчитайте количество строк.