LIMIT的SQL参数不能包含变量

LIMIT的SQL参数不能包含变量,sql,postgresql,Sql,Postgresql,我有Aida PK,entry_year。,Bidc PK,ida FK,价值1。和Cyear PK,value2。 我试图从表B中选择与表a的特定ida相关联的第一个n值1,其中n是表C的值2,其C年与a年相同。代码与此类似: select value1 from A as Alpha join B using(ida) where A.ida=$1 limit (select value2 from C where year=(select entry_year from A where A

我有Aida PK,entry_year。,Bidc PK,ida FK,价值1。和Cyear PK,value2。 我试图从表B中选择与表a的特定ida相关联的第一个n值1,其中n是表C的值2,其C年与a年相同。代码与此类似:

select value1 from A as Alpha join B using(ida)
where A.ida=$1
limit (select value2 from C where year=(select entry_year from A where A.ida=Alpha.ida))
但我得到了以下错误:LIMIT的参数不能包含变量。 我该怎么办

谢谢

您可以使用来模拟限制

SELECT * FROM (
    select 
        value1,
        entry_year,
        row_number() OVER() AS rownum --Probably you should use PARTITION BY here using student id if you want to retrieve more than one student
    from 
        A as Alpha 
        join B using(ida)
    where A.ida=$1) as tmp
JOIN C ON (C.year = tmp.entry_year)
WHERE rownum <= C.value2

您在limit中有Alpha别名-您不能加入limit。。。对于从C中选择值2,其中年份=选择条目\从A中选择年份,其中A.ida=Alpha.ida,您的意思是什么?。。verbally@VaoTsun好的,我会用更简单的名字来表达我的例子。表A是一个学生。表C是学校的毕业规则。后者有每年入学的规则。例如,2017年进入学校的学生总共必须通过35门课程,而2018年的学生必须通过34门课程。表B包含来自studentstable A的申请。我希望表B中的第一个n申请,其中n是适用的毕业人数规则表C允许每个学生表A。因此,在限制条款中,我需要找到每个学生都不同的具体限制@米列兹:好的,我明白了,谢谢……但是限制条款有什么意义呢?我现在有点糊涂了。@laprimosiestalimit允许您从查询中只检索指定数量的行,例如:SELECT*from table_1 LIMIT 100-将只获得表1的100行,这不是您想要的,更多信息