在mysql select语句中使用条件where子句

nam*_*mco 4 mysql sql select

MySql中有一个存储过程sp_select_from_persons。这个程序中有3个参数。age, class, group。这些参数值可以是-1或其他值。这些参数将在子句中使用where
现在我想这样编写 where 子句,如果这些参数的任何值不为-1,则将它们附加到where子句中。例如:
如果年龄 = -1、班级 = 7 且组 = 5,则选择查询将为:

SELECT * FROM persons p WHERE p.class = class AND p.group = group;  
Run Code Online (Sandbox Code Playgroud)

或者如果年龄 = 25、班级 = -1 且组 = -1,则:

SELECT * FROM persons p WHERE p.age = 25;
Run Code Online (Sandbox Code Playgroud)

等等。

我不想使用如下所示的嵌入 IF 语句:

IF age > 0 THEN 
  IF class > 0 THEN
     IF group > 0 THEN
     SELECT * FROM persons p WHERE p.age = age AND p.class = class AND p.group = group;
     END IF
     ELSE ....... etc
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

Rav*_*avi 5

这是一个单行查询......试试这个

SELECT * FROM persons p 
WHERE p.age = case when age = -1 then p.age else age end
and p.class = case when class = -1 then p.class else class end
and p.group = case when group = -1 then p.group  else group end
Run Code Online (Sandbox Code Playgroud)