我想使用不同的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