要点是,我想返回employee_id
条款的IN
个数字列表。
我获得employee_id
的列表,例如(2,3,4,5)
和company_id
,例如5
。其中一些属于company=5
,有些则不属于company=5
。如果其中任何一个属于IN
,那么我只想在employee_id
子句中使用这些id号。如果给定的company=5
个数字中没有一个属于employee_id
,那么我想返回company=5
的所有WHEN
个数字。
我在这里有逻辑,但不幸的是你不能从子选择中的WHERE
子句中返回多个值,所以这个语句会返回错误。
我正在尝试修改现有的SELECT employee_id FROM employees
WHERE company_id=5
AND employee_id IN (
CASE
WHEN NOT EXISTS(SELECT employee_id FROM employees WHERE company_id=5 AND employee_id IN (2,3,4,5)) THEN
SELECT employee_id FROM employees WHERE company_id=5
ELSE
SELECT employee_id FROM employees WHERE company_id=5 AND employee_id IN (2,3,4,5)
END
)
子句,因此我需要在此语句中进行更改,而不使用游标等。我知道必须有办法将这些转换为一系列AND / OR,但我无法弄明白。
感谢您的帮助!
{{1}}
答案 0 :(得分:1)
这会有用吗?
SELECT employee_id FROM employees
WHERE company_id=5
and employee_id IN (2,3,4,5)
and exists (select * from employees where company_id = 5 and employee_id IN (2,3,4,5))
union all
SELECT employee_id FROM employees
WHERE company_id=5
and Not exists (select * from employees where company_id = 5 and employee_id IN (2,3,4,5))
只有一个存在/不存在可以触发。所以这将做一个选择或另一个,但不使用If或Case语句。第一个存在可能是不必要的......所以
SELECT employee_id FROM employees
WHERE company_id=5
and employee_id IN (2,3,4,5)
union all
SELECT employee_id FROM employees
WHERE company_id=5
and Not exists (select * from employees where company_id = 5 and employee_id IN (2,3,4,5))