如何用单条SQL获取含YEEF_SAFE_HARBOR_RESULT=12的员工全量月度记录?
可以用单条SQL实现这个需求,以下是几种常用的实现方式:
方法1:使用EXISTS子查询
逻辑直观易懂,适合大多数数据库:
SELECT t.* FROM your_table t WHERE EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.employee_id = t.employee_id AND t2.YEEF_SAFE_HARBOR_RESULT = 12 );
逻辑说明:外层查询每条记录时,会检查同员工ID下是否存在任意一条YEEF_SAFE_HARBOR_RESULT等于12的记录,只要存在就保留该员工的所有数据。
方法2:使用窗口函数(适用于MySQL 8+、PostgreSQL、SQL Server等支持窗口函数的数据库)
效率较高,无需多次扫描表:
WITH employee_status AS ( SELECT *, MAX(CASE WHEN YEEF_SAFE_HARBOR_RESULT = 12 THEN 1 ELSE 0 END) OVER (PARTITION BY employee_id) AS has_qualified FROM your_table ) SELECT * FROM employee_status WHERE has_qualified = 1;
逻辑说明:先通过窗口函数按员工ID分组,标记每个员工是否存在符合条件的记录(存在则has_qualified为1,否则为0),再筛选出标记为1的所有记录。
方法3:使用IN子查询
先提取符合条件的员工ID集合,再查询对应数据:
SELECT * FROM your_table WHERE employee_id IN ( SELECT DISTINCT employee_id FROM your_table WHERE YEEF_SAFE_HARBOR_RESULT = 12 );
逻辑说明:子查询先找出所有有YEEF_SAFE_HARBOR_RESULT=12记录的员工ID,外层查询直接获取这些员工的全部月度数据。
如果你的基础查询涉及多表关联,只需把上述示例中的your_table替换成你的多表关联结果(可以用子查询或CTE封装)即可。比如多表关联场景的EXISTS写法:
SELECT e.*, m.* FROM employee e JOIN monthly_record m ON e.id = m.employee_id WHERE EXISTS ( SELECT 1 FROM monthly_record m2 WHERE m2.employee_id = e.id AND m2.YEEF_SAFE_HARBOR_RESULT = 12 );
内容的提问来源于stack exchange,提问作者Colino3
相关产品推荐
相关产品推荐

