如何获取COUNT个LEFT JOIN数据

时间:2019-05-30 15:45:14

标签: sql dql

我正在尝试获取ChannelGroup,其中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)

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

如果要查找与另一个表没有连接的行,可以执行以下操作。在where中,表2中可以有任何列。

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

答案 1 :(得分:0)

您不能使用聚合函数,例如COUNT子句中的WHERE。但是,您可以在HAVING子句中使用聚合函数。有关WHEREHAVING之间的区别,请参见this question

但是,如果您只是尝试从cg获取cgu中没有任何联接行的行,则可以选择cgu.id为空的地方。

例如:

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