如何根据过程中的输入参数使用不同的where条件?



我想使用不同的where条件,这取决于过程中的输入参数。

CREATE PROCEDURE proc_IF (IN param1 INT)  
BEGIN  
SELECT * FROM articles 
IF param1 = 0 THEN  
WHERE name = 'Тест'
ELSE  
WHERE name = 'Проверка'  
END IF;  
END

当有两个以上的条件时,可以使用case when

CREATE PROCEDURE proc_IF (IN param1 INT)  
BEGIN  
SELECT * FROM articles 
WHERE name = 
(
CASE WHEN param1 = 0 THEN 'Тест'
ELSE 'Проверка' END
);
END

如果只有两个条件,那么您可以使用IF代替

CREATE PROCEDURE proc_IF (IN param1 INT)  
BEGIN  
SELECT * FROM articles 
WHERE name = IF(param1 = 0,'Тест','Проверка');
END

我建议一般避免在WHERE子句中使用CASE表达式。你可以使用:

CREATE PROCEDURE proc_IF (IN param1 INT)  
BEGIN  
SELECT a.*
FROM articles a
WHERE (param1 = 0 AND name = 'Тест') OR
(not param1 <=> 0);
END

最新更新