子查询返回超过1行,我不知道

时间:2014-05-17 22:42:54

标签: sql subquery row

当我尝试获取“tytul”字段时,我发现此错误

   SELECT f.*, 
      (SELECT MAX(e) FROM seriale WHERE s = MAX(k.s) AND id_serialu = f.id) as e, 
      MAX(k.s) as s, 
      (SELECT tytul FROM seriale c WHERE c.s = s AND c.e = e) as tytul
   FROM serial f
   LEFT JOIN seriale k ON f.id=k.id_serialu
   GROUP BY f.id
   ORDER BY f.id DESC
   LIMIT 25

2 个答案:

答案 0 :(得分:0)

我认为你的子查询中需要一些别名。

(SELECT tytul FROM seriale c WHERE c.s = f.s AND c.e = f.e) as tytul

如果您不这样做,则会在最近的范围s中搜索ec,因此查询将被解释为:

(SELECT tytul FROM seriale c WHERE c.s = c.s AND c.e = c.e) as tytul

这显然会返回多行,因为它会返回表中的所有内容。

但是对于别名,它当然只会起作用,如果seriale中每个s和e组合最多有1行。

答案 1 :(得分:0)

在select语句中使用子查询时,特定子查询应该只返回1行。

例如:在您的查询中

(SELECT MAX(e) FROM seriale WHERE s = MAX(k.s) AND id_serialu = f.id)

(SELECT tytul FROM seriale c WHERE c.s = s AND c.e = e)

应该只返回一个值。它不能返回超过1的值。