#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
Другие вопросы по тегам