如何处理返回没有行的 IN 子句的子查询
Posted
技术标签:
【中文标题】如何处理返回没有行的 IN 子句的子查询【英文标题】:How to handle subquery returning for IN clause having no rows 【发布时间】:2019-11-25 03:19:12 【问题描述】:我有一个架构,其中分配了位置的员工详细信息保存在“员工”表中。
分配给位置的所有角色都具有 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)
但是,只有当没有角色分配给员工并且想要停用时,才会有一个问题
AND lrl.role IN (select er.roleCode from emp_role er where er.empCode = ?1)
那么这个 IN 子句将给出空列表。
一种方法是我将执行另一个查询,如果大小大于 0,那么我将调用 UPDATE 查询。 但是,这将是来自应用程序的 2 个查询。
有什么方法可以从查询端处理这个问题?
【问题讨论】:
为什么要标记 mysql 和 SQL Server? 【参考方案1】:你可以使用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)
【讨论】:
以上是关于如何处理返回没有行的 IN 子句的子查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Grafana 中,我们如何处理在图表/面板中返回 0 行的查询?