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)
有一个更好的方法吗?
这是一个单行查询......试试这个
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)