0

要点は、句のemployee_id番号のリストを返したいということです。IN

employee_idlike(2,3,4,5)と a company_idlikeのリストが与えられ5ます。これらの一部は に属しcompany=5、一部は属しません。これらのいずれかが に属している場合、句company=5ではそれらの ID 番号のみを使用したいと考えています。IN指定されたemployee_id番号のどれも に属していない場合、 のすべての番号company=5を返したいと思います。employee_idcompany=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 に答える