#1242 - Подзапрос возвращает более 1 строки - mysql
Я пытаюсь сделать оператор выбора, который выбирает имена изображений из базы данных MySQL. Таблица называется - pictures_archive. Я также пытаюсь выбрать эти фотографии в зависимости от категории, которую они имеют. Код является:
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id = (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9)
Это дает мне ошибку "#1242 - Подзапрос возвращает более 1 строки". Я понимаю почему, но не могу понять, как это сделать.
4 ответа
Решение
Поскольку ваш подзапрос может возвращать несколько значений, IN
должен соответствовать вам, где пункт.
SELECT pictures_archive_filename
FROM pictures_archive
WHERE pictures_archive_id IN
(
SELECT pictures_archive_id
FROM pictures_archive_category
WHERE pictures_category_id = 9
)
альтернативой для этого является join
обе таблицы, что более эффективно.
SELECT pictures_archive_filename
FROM pictures_archive a
INNER JOIN pictures_archive_category b
ON a.pictures_archive_id = b.pictures_archive_id
WHERE b.pictures_category_id = 9
Используйте IN вместо равных (=)
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id IN (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9)
ИЛИ, если возможно, используйте JOIN между двумя таблицами
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id = (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9 LIMIT 1)
SELECT p.pictures_archive_filename FROM
pictures_archive p inner join pictures_archive_category pc
on p.pictures_archive_id = pc.pictures_archive_id
where pc.pictures_category_id=9