Table Example :
CREATE TABLE offices
(`office_id` int,`country` varchar(50),`population` int)
;
INSERT INTO offices
(`office_id`,`country`,`population`)
VALUES
(1,'AU',20000),
(2,'US',1200),
(3,'UK',150000),
(4,'NZ',1200)
;
我在存储过程中使用可选的 where 子句,如下所示:
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN yr_val varchar(50))
BEGIN
SELECT *
FROM offices
WHERE yr_val IS NULL OR country RLIKE yr_val
ASC
END //
DELIMITER ;
我想知道是否有一种方法可以根据参数 yr_where
将 CASE WHEN
用于不同的 Where Clause
。如果为 1,则在 country 字段中查找值,如果为 2,则在 population 字段中查找:
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN yr_where tinyint(1),IN yr_val varchar(50))
BEGIN
SELECT *
FROM offices
WHERE 1 = 1
CASE yr_where
WHEN 1 THEN AND country RLIKE yr_val
WHEN 2 THEN AND population > yr_val
ELSE 1 END
ASC
END //
DELIMITER ;
不,您不能在这样的 where
子句中使用 case
。但你也可以这样做
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN yr_where tinyint(1),IN yr_val varchar(50))
BEGIN
SELECT *
FROM offices
WHERE (yr_where = 1 and country RLIKE yr_val)
OR (yr_where = 2 and population > yr_val)
END //
DELIMITER ;
我是一名优秀的程序员,十分优秀!