我想找到所有符合特定標準的員工的公司,並返回有關這些員工的信息,以及這些公司的所有者。不過,我的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別名的信息。
簡短的回答,沒有。長答案。對於不同的子查詢是不同的條件,所以你必須在每個子查詢中定義它。 –
重複它沒有什麼不對的 –
然後我只能想到創建一個函數來接收所有參數並返回布爾值。但是並沒有真正簡化代碼。 –