Я пытаюсь получить ChannelGroups, где ChannelGroup имеет счет 0 в своем отношении ChannelGroupUsers.
public function userEmptyChannelGroups()
{
return $this->getEntityManager()
->createQuery(
'SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE COUNT(cgu) = 0'
)
->getArrayResult();
}
Но я продолжаю получать SQLSTATE[HY000]: General error: 1111 Invalid use of group function (500 Internal Server Error)
после того, как попробовал вышеперечисленное.
Что я делаю неправильно?
Если вы хотите найти строки, которые не связаны с другой таблицей, вы можете сделать что-то вроде этого. В where
может быть любой столбец из таблицы2.
select
*
from table1
left join table2
on table1.id = table2.id
where table2.someColumn is null
Вы не можете использовать агрегатную функцию, например COUNT
в предложении WHERE
. Однако вы можете использовать агрегатную функцию в предложении HAVING
. См. этот вопрос, чтобы узнать больше о разнице между WHERE
и HAVING
.
Однако, если вы просто пытаетесь получить строки в cg
, которые не имеют присоединенных строк из cgu
, вы можете выбрать, где cgu.id
имеет значение null.
Например:
SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL
Наверное, научиться пользоваться
GROUP BY
.