如何获取 LEFT JOIN 数据的 COUNT

How to get COUNT of LEFT JOIN data

我正在尝试获取 ChannelGroups,其中 ChannelGroup 在其关系 ChannelGroupUsers 上的计数为 0。

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)

我做错了什么?

如果您想查找与其他行没有关联的行 table,您可以这样做。在 where 中可以有来自 table2.

的任何列
select
    *
from table1 
left join table2
    on table1.id = table2.id
where table2.someColumn is null 

您不能在 WHERE 子句中使用聚合函数,例如 COUNT。但是,您可以在 HAVING 子句中使用聚合函数。有关 WHEREHAVING 之间差异的更多信息,请参阅 this question

但是,如果您只是想获取 cg 中没有来自 cgu 的任何连接行的行,您可以 select 其中 cgu.id 为空。

例如:

SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL