Search code examples
mysqlmysql-error-1242

#1242 - Subquery returns more than 1 row - mysql


I am trying to make a select statement that selects the image names from a MySQL database. The table is called - pictures_archive. I am also trying to select these pictures depending on the category they have. The code is:

SELECT pictures_archive_filename FROM pictures_archive 
WHERE pictures_archive_id = (SELECT pictures_archive_id 
FROM pictures_archive_category WHERE pictures_category_id = 9)

It gives me an "#1242 - Subquery returns more than 1 row" error. I can see why, but can't figure it out how to do it.


Solution

  • Since your subquery can return multiple values, IN should fit in youy where clause.

    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
    )
    

    an alternative for this is to join both tables which is more efficient.

    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