У меня сейчас есть следующий sql (сгенерированный typeorm).
SELECT
"media"."permissionOwner" AS "media_permissionOwner",
"media"."permissionGroup" AS "media_permissionGroup",
"media"."permissionOther" AS "media_permissionOther",
"media"."id" AS "media_id",
"media"."filename" AS "media_filename",
"media"."mime" AS "media_mime",
"media"."description" AS "media_description",
"media"."length" AS "media_length",
(
SELECT
1
FROM
"user" "user"
WHERE
"user"."id" = $1 LIMIT 1
)
AS "user"
FROM
"media_object" "media"
LEFT JOIN
"media_object_groups_group" "media_groups"
ON "media_groups"."mediaObjectId" = "media"."id"
LEFT JOIN
"group" "groups"
ON "groups"."id" = "media_groups"."groupId"
LEFT JOIN
"media_object_owner_user" "media_owner"
ON "media_owner"."mediaObjectId" = "media"."id"
LEFT JOIN
"user" "owner"
ON "owner"."id" = "media_owner"."userId"
WHERE
(
"media"."permissionGroup" >= $2
AND
COUNT("groups") = 0 -- How can I accomplish this
)
OR
(
"media"."permissionGroup" >= $3
AND groups @ > user_groups
)
OR
(
owner @ > ARRAY[user]
AND "media"."permissionOwner" >= $4
)
OR "media"."permissionOther" >= $5 -- PARAMETERS: [23,4,4,4,4]
Проблема в том, что я не могу использовать HAVING, потому что не похоже, что он поддерживает этот тип условийГде же.
Я попробовал это с подзапросом в части COUNT, но затем я не могу получить доступ к псевдониму "groups" в запросе подсчета sub select.
Я даже не уверен, работает ли другая часть запроса, но сначала я хочу решить проблему «подсчета».