#1242 - 子查询返回超过1行 - mysql

时间:2012-09-26 08:30:39

标签: mysql mysql-error-1242

我正在尝试创建一个select语句,从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 - Subquery返回超过1行”的错误。我明白为什么,但无法弄明白该怎么做。

4 个答案:

答案 0 :(得分:20)

由于您的子查询可以返回多个值,IN应该适合您的where子句。

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

答案 1 :(得分:0)

使用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)

或者如果可能的话,在2个表之间使用JOIN

答案 2 :(得分:0)

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)

答案 3 :(得分:0)

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
相关问题