特定の条件を満たす従業員を持つすべての企業を探して、それらの従業員に関する情報、およびそれらの企業の所有者に関する情報を返したいと思います。私のSQLは少し繰り返されていますが、WHERE条件のいくつかにエイリアスを使用する方法があるのだろうかと思います。PostgresでWHERE条件のエイリアスを作成できますか?
は、このクエリを考えてみましょう:
SELECT json_agg(employee.*) employees_and_admins, company.*
FROM company
JOIN employee ON employee.company_id = company.id
WHERE employee.owner IS TRUE
-- This is where the repetitive stuff starts
OR employee.first_name IS NULL
OR employee.last_name IS NULL
OR employee.date_of_birth IS NULL
OR employee.hire_date IS NULL
OR employee.email IS NULL
GROUP BY company.id
HAVING sum(CASE
-- Note the repetition; note also we're not checking employee.owner here
WHEN (
employee.first_name IS NULL
OR employee.last_name IS NULL
OR employee.date_of_birth IS NULL
OR employee.hire_date IS NULL
OR employee.email IS NULL)
THEN 1 ELSE 0 END) > 0;
は、これらすべてのOR条件の繰り返しを避けるためにいくつかの方法はありますか?私はSELECTエイリアスに関する情報を得続けているので、オンラインで回答を検索するのは少し聞いています。
短い回答、いいえ。長い答え。サブクエリごとに異なる条件があるため、それぞれにサブクエリを定義する必要があります。 –
それを繰り返すことに何も問題はありません –
私は、すべてのパラメータを受け取ってブール値を返す関数を作成すると思います。しかし、本当に多くのコードを単純化しません。 –