0

要点是,我想返回子句的employee_id数字列表。IN

我得到了一个employee_ids like(2,3,4,5)和 a company_idlike的列表5。其中一些属于company=5,一些不属于。如果其中任何一个属于company=5,那么我只想在IN子句中使用这些 ID 号。如果给定employee_id数字中没有一个属于company=5,那么我想返回 ALLemployee_id的数字company=5

我在这里有逻辑,但不幸的是,您不能WHEN从子选择返回子句内的多个值,因此该语句返回错误。

我正在尝试修改现有WHERE子句,因此我需要在此语句中进行更改并且不使用游标等。我知道必须有一种方法可以将这些转换为一系列 AND/OR,但我无法弄清楚。

感谢您的任何帮助!

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
  )
4

1 回答 1

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))
于 2012-11-28T23:03:39.743 回答