给定员工ID与三张表,如何在员工属full_time_contract时设置num = num + 1?
实现方案
核心逻辑是验证指定员工是否存在对应的全职合同记录(通过staff→contract→full_time_contract的关联关系能找到匹配数据),若存在则将变量num加1。以下是主流数据库的具体实现:
MySQL 版本
-- 假设已声明变量num,且指定目标员工ID为@target_staff_id SET @target_staff_id = 123; -- 替换为实际指定的staff_id SET @num = 0; -- 示例初始值 IF EXISTS ( SELECT 1 FROM staff s JOIN contract c ON s.staff_id = c.staff_id JOIN full_time_contract f ON c.contract_id = f.contract_id WHERE s.staff_id = @target_staff_id ) THEN SET @num = @num + 1; END IF;
SQL Server 版本
-- 假设已声明变量num,且指定目标员工ID为@target_staff_id DECLARE @target_staff_id INT = 123; -- 替换为实际指定的staff_id DECLARE @num INT = 0; -- 示例初始值 IF EXISTS ( SELECT 1 FROM staff s INNER JOIN contract c ON s.staff_id = c.staff_id INNER JOIN full_time_contract f ON c.contract_id = f.contract_id WHERE s.staff_id = @target_staff_id ) BEGIN SET @num = @num + 1; END
通用简化写法
无需条件判断,直接通过统计匹配记录数实现累加:
-- 以MySQL为例,其他数据库语法类似 SET @num = @num + ( SELECT COUNT(DISTINCT s.staff_id) FROM staff s JOIN contract c ON s.staff_id = c.staff_id JOIN full_time_contract f ON c.contract_id = f.contract_id WHERE s.staff_id = @target_staff_id );
这里用COUNT(DISTINCT s.staff_id)是为了避免员工有多个全职合同时重复累加,确保仅加1次。
内容的提问来源于stack exchange,提问作者심준호
相关产品推荐
相关产品推荐

