mysql - 可选的 WHERE 子句根据存储过程中的参数搜索不同的字段

标签 mysql sql database stored-procedures

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_whereCASE 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 ;

关于mysql - 可选的 WHERE 子句根据存储过程中的参数搜索不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27665494/

相关文章:

mysql - 用新数据替换 MySQL 列数据?

mysql - 如何使用vb.net在sql server上创建表,其中名称由用户输入

sql - MySQL性能

mysql - Rails - 如何在这些表之间进行连接?

mysql - SQL大查询优化

java - 使用 Hibernate 删除父行时如何删除所有子行?

c# - 将重复列折叠到子列表中

database - 连接到 Node.JS 中的数据库

php - 无限期运行 PHP 脚本,MySQL 超时

mysql - 将文件加载到mysql中