Как получить данные COUNT of LEFT JOIN - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь получить ChannelGroup, где 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) после попытки вышеуказанного.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Вы не можете использовать агрегатную функцию, например COUNT в предложении WHERE. Однако вы можете использовать агрегатную функцию в предложении HAVING. См. этот вопрос , чтобы узнать больше о разнице между WHERE и HAVING.

Однако, если вы просто пытаетесь получить строки в cg, у которых нет соединенных строк из cgu, вы можете выбрать, где cgu.id равно нулю.

Например:

SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL
0 голосов
/ 30 мая 2019

Если вы хотите найти строки, которые не имеют связи с другой таблицей, вы можете сделать что-то вроде этого. В where может быть любой столбец из таблицы 2.

select
    *
from table1 
left join table2
    on table1.id = table2.id
where table2.someColumn is null 
...