Описание тега mysql-error-1242

Ошибка 1242: подзапрос возвращает более 1 строки

Когда подзапрос возвращает более одной строки в контексте, где ожидается одна строка, вы получаете следующую ошибку:

Ошибка 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)