Как получить COUNT данных LEFT JOIN

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

Что я делаю неправильно?

Наверное, научиться пользоваться GROUP BY.

Eric 30.05.2019 18:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите найти строки, которые не связаны с другой таблицей, вы можете сделать что-то вроде этого. В 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

Другие вопросы по теме