如果参数为null(开放式Office base),sql查询返回0

如果参数为null(开放式Office base),sql查询返回0,sql,Sql,我有一张由以下列组成的表格: int IDpupil varchar name int class 其中类是外键且不可为空,即每个学生必须在一个类中 我希望看到一个班级中的所有学生,这取决于我每次新建时要指定的班级编号 如果我指定了一个类,则以下语句不符合预期要求: SELECT "IDpupil", "name", "class" FROM "pupils" WHERE (("class" = :qClass)

我有一张由以下列组成的表格:

int      IDpupil
varchar  name
int      class
其中类是外键且不可为空,即每个学生必须在一个类中

我希望看到一个班级中的所有学生,这取决于我每次新建时要指定的班级编号

如果我指定了一个类,则以下语句不符合预期要求:

SELECT "IDpupil", 
       "name", 
       "class" 
  FROM "pupils" 
 WHERE (("class" = :qClass) 
        OR (:qClass is null))
但是,如果我希望看到该表中的所有学生,因此不指定数字,则只返回0类的学生。如果我用名字做这件事,它会起作用。在我看来,null参数被强制转换为0,这是我不想要的。我怎样才能解决这个问题


我尝试使用一个case语句,它应该测试输入是Null还是Null,但我没有让它工作。也可能是因为案例陈述的复杂性。然后我试了一下。也没有帮助。

我看不出你的问题到底出在哪里,但如果你想把所有的问题都解决,那就选一个大的地方,但任何地方都离你很近


类可以为空吗?例如,定义中是int class还是int class null?@dasblinkenlight否,class not不可为null查看它是否工作:0=:qClass和:qClass为null或class=:qClass看起来诀窍在于说服系统:qClass可为null,即当您不指定任何数字时,它仍为null。换句话说,这听起来像是导致查询的代码路径将空:qClass解释为零,而不是空。@dasblinkenlight我的想法没错,有人知道如何解决这个问题吗?我走了这么远。如果我这样做,我必须实现两个查询,其中一个是另一个的特例。我不想这么做,我找不到其他解决办法。所以我必须这样做。
SELECT "IDpupil", 
       "name", 
       "class" 
  FROM "pupils"