Sql 子查询返回多个我不知道的行
当我试图获取“tytul”字段时,我发现了这个错误Sql 子查询返回多个我不知道的行,sql,subquery,row,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 se
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
我认为您的子查询中需要一些别名
(SELECT tytul FROM seriale c WHERE c.s = f.s AND c.e = f.e) as tytul
如果不这样做,s
和e
将在最近的范围内查找,即c
,因此查询将被解释为:
(SELECT tytul FROM seriale c WHERE c.s = c.s AND c.e = c.e) as tytul
这显然会返回多行,因为它会返回表中的所有内容
但是对于别名,它当然只起作用,如果在select语句中使用子查询时,在
serial
中,s和e的每个组合最多有1行,那么特定子查询应该只返回1行
例如:在你的询问中
(SELECT MAX(e) FROM seriale WHERE s = MAX(k.s) AND id_serialu = f.id)
及
应该只返回一个值。它不能返回超过1个值。此查询将为序列表的每一行返回1行或多行。如果您不提供进一步的信息,则无法说明发生了什么以及如何更正查询。序列号和序列号有什么关系?为什么要在serial上添加左连接,并将其与同一表上的subselect混合?
(SELECT tytul FROM seriale c WHERE c.s = s AND c.e = e)