سؤال

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.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

Use IN instead of equal (=)

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)

OR if possible use a JOIN between 2 tables

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top