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 ;
我想知道是否可以根据参数CASE WHEN
将Where Clause
用于不同的yr_where
。如果它是1,那么在国家/地区字段中查找值,如果为2,则在人口字段中查找:
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 ;
答案 0 :(得分:2)
不,您不能在case
条款中使用where
。但你也可以这样做
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 ;
答案 1 :(得分:2)
使用此:
WHERE 1 = 1
AND CASE yr_where
WHEN 1 THEN country RLIKE yr_val
WHEN 2 THEN population > yr_val
ELSE 1
END
必须在允许表达式的地方使用CASE
表达式,该表达式位于AND
之后。