首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果未从界面中选择员工,则获取所有员工,否则选择特定的员工数据

如果未从界面中选择员工,则获取所有员工,否则选择特定的员工数据
EN

Stack Overflow用户
提问于 2021-06-28 13:24:15
回答 2查看 58关注 0票数 0

如果没有选择任何员工,我想选择所有员工,否则需要所选员工的数据。

我已经写了这个查询,但是它抛出了错误。

代码语言:javascript
运行
复制
DECLARE @emp_id INT

SET @emp_id=0 -- This will change based on the selected employee from UI

SELECT * FROM employees
WHERE employee_id in (CASE WHEN @emp_id=0 THEN (SELECT employee_id FROM employees) ELSE @emp_id END)

用于重现问题的示例脚本

代码语言:javascript
运行
复制
CREATE TABLE employees (
    employee_id INT ,
    first_name VARCHAR (20) DEFAULT NULL,
    last_name VARCHAR (25) NOT NULL
);

INSERT INTO employees values (1, '1_fname', '1_lname'),(2, '2_fname', '2_lname'),(3, '3_fname', '3_lname'),(4, '4_fname', '4_lname'),(5, '5_fname', '5_lname')

我想在单个查询中这样做。

EN

回答 2

Stack Overflow用户

发布于 2021-06-28 14:31:41

假设您使用的是预准备语句,您将需要提供两次所选员工-作为参数1和2:

代码语言:javascript
运行
复制
SELECT * FROM employees
WHERE CASE WHEN COALESCE(?,0) = 0 THEN TRUE ELSE id = ? END
票数 0
EN

Stack Overflow用户

发布于 2021-06-28 14:32:08

对于单个查询,我们可以使用相同的表来模拟是否应该显示employees,我们可以使用INNER JOIN。使用此查询将产生所需的输出。

代码语言:javascript
运行
复制
select e.*
from employees e
inner join (
    select employee_id,
        case 
            when @emp_id = 0 then true -- will display all employees
            when @emp_id = @emp_id then true -- only display selected employee
        else false
        end as is_shown
    from employees
) filter on e.employee_id = filter.employee_id and filter.is_shown = 1;

或者使用另一种方法

代码语言:javascript
运行
复制
select employee_id, first_name, last_name
from (
    select e.*,
        case 
            when @emp_id = 0 then true
            when @emp_id = employee_id then true
        else false
        end as is_shown
    from employees e
) employees
where is_shown = 1;

存储过程内部的简单流控制

代码语言:javascript
运行
复制
delimiter $$

use `precise`$$

drop procedure if exists `GetEmployee`$$

create definer=`user`@`%` procedure `GetEmployee`(empID int)
begin

case when empID = 0 then
    select *
    from employees;
else
    select *
    from employees
    where employee_id = empID;
end case
;   

end$$

delimiter ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68157967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档