Oracle SQL Where子句中使用Case语句实现动态条件查询
实现方案
你可以直接在WHERE子句中嵌入CASE语句实现条件分支判断,以下两种写法均可使用:
写法1(适配支持布尔返回值的数据库,如MySQL、PostgreSQL)
SELECT * FROM employees WHERE CASE WHEN country = 'USA' THEN emp_id = v_usa_emp_id ELSE emp_id <= v_emp_id END;
写法2(全数据库兼容,适配Oracle等不支持CASE返回布尔值的数据库)
SELECT * FROM employees WHERE CASE WHEN country = 'USA' AND emp_id = v_usa_emp_id THEN 1 WHEN country != 'USA' AND emp_id <= v_emp_id THEN 1 ELSE 0 END = 1;
逻辑说明
- 当
country取值为USA时,仅返回emp_id等于v_usa_emp_id的员工记录 - 当
country取值不为USA时,返回所有emp_id小于等于v_emp_id的员工记录
内容的提问来源于stack exchange,提问作者Sangathamilan Ravichandran
相关产品推荐
相关产品推荐

