Reputation: 2180
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.
Upvotes: 11
Views: 90523
Reputation: 13496
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
Upvotes: 0
Reputation: 46408
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)
Upvotes: 1
Reputation: 263723
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
Upvotes: 28
Reputation: 4703
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
Upvotes: 0