Описание тега mysql-error-1242
Когда подзапрос возвращает более одной строки в контексте, где ожидается одна строка, вы получаете следующую ошибку:
Ошибка 1242: подзапрос возвращает более 1 строки
Рассмотрим, например, следующий запрос, который возвращает строку в yourtable
с максимальным связанным идентификатором:
SELECT yourtable.*
FROM yourtable
WHERE id = (SELECT MAX(id) FROM yourtable)
Это нормально работает, потому что подзапрос возвращает не более одной строки.
Затем вы можете захотеть получить все строки с максимальным идентификатором для каждого имени, поэтому вам нужно добавить предложение GROUP BY в подзапрос, но вы также должны изменить внешний запрос следующим образом:
SELECT yourtable.*
FROM yourtable
WHERE id IN (SELECT MAX(id)
FROM yourtable
GROUP BY name)
(здесь IN
предложение необходимо, потому что подзапрос может возвращать более одной строки).
Или вы всегда можете использовать LIMIT 1
, как в этом примере, который возвращает строку с максимальным идентификатором для самого большого имени:
SELECT *
FROM yourtable
WHERE id = (SELECT MAX(id)
FROM yourtable
GROUP BY name
ORDER BY name DESC
LIMIT 1)