Это потому, что вы упоминаете f_sync.employee_count
в своем запросе, но f_sync
не имеет столбца с именем employee_count
: вы только что создали динамический столбец в запросе с псевдонимом employee_count
.
Простое исправление - повторить расчет:
SELECT
g_contac.contid, g_contac.name, g_contac.email, f_sync.foreign_key,
(
SELECT COUNT(g_cpers.cpersid)
FROM g_cpers
WHERE g_cpers.contid = g_contac.contid
) AS employee_count
FROM f_sync
FULL OUTER JOIN g_contac ON
(
g_contac.contid = f_sync.external_id AND
model = case when (SELECT COUNT(g_cpers.cpersid)
FROM g_cpers
WHERE g_cpers.contid = g_contac.contid) = 0 then 'PRIVATE' else 'COMPANY' end
)
WHERE model = 'COMPANY' or model = 'PRIVATE' OR model IS null;
Лучшее решение - создать представление, включающее этот столбец, что будет означать, что оно будет рассчитано только один раз;
Редактировать: Улучшенный запрос и встроенные комментарии
Вы могли бы немного улучшить ясность, используя SQL not exists
вместо count(*) = 0
:
SELECT
g_contac.contid, g_contac.name, g_contac.email, f_sync.foreign_key
FROM f_sync
FULL OUTER JOIN g_contac ON
(
g_contac.contid = f_sync.external_id AND
model = case when not exists (SELECT * FROM g_cpers
WHERE g_cpers.contid = g_contac.contid) then 'PRIVATE' else 'COMPANY' end
)
WHERE model = 'COMPANY' or model = 'PRIVATE' OR model IS null;