如何处理没有行的 IN 子句的子查询返回



我有一个架构,其中分配了位置的员工详细信息保存在"员工"表中。

分配给位置的所有角色都max_limit计数,并且assigned_count位于"loc_role_limit"表中

分配给员工的所有角色都保留在"emp_role"表中

现在,当员工被停用时,我想减少该位置和该员工角色的assigned_count

UPDATE loc_role_limit lrl SET lrl.assigned_count = lrl.assigned_count + 1  
WHERE lrl.location = (select e.location from employee e where e.empCode = ?1)
AND lrl.role IN  (select er.roleCode from empl_role er where er.empCode = ?1) 

但是,仅当没有为员工分配角色并希望停用时,才存在 1 个问题

AND lrl.role IN  (select er.roleCode from emp_role er where er.empCode = ?1) 

那么这个 IN 子句将给出空列表。

一种方法是我将执行另一个查询,如果大小大于 0,那么我将调用 UPDATE 查询。 但是,同样,这将是来自应用程序的 2 个查询。

有什么方法可以从查询端处理这个问题吗?

您可以使用EXISTS查询,例如

UPDATE loc_role_limit lrl SET lrl.assigned_count = lrl.assigned_count + 1  
WHERE lrl.location = (select e.location from employee e where e.empCode = ?1)
AND EXISTS  (select er.roleCode from empl_role er where er.empCode = ?1)

最新更新