#1242 - Subquery returns more than 1 row - mysql

与世无争的帅哥 提交于 2019-12-18 12:37:38

问题


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.


回答1:


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



回答2:


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




回答3:


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)



回答4:


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


来源:https://stackoverflow.com/questions/12597620/1242-subquery-returns-more-than-1-row-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!