我正在尝试获取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)
。
我在做什么错了?
答案 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
子句中使用聚合函数。有关WHERE
和HAVING
之间的区别,请参见this question。
但是,如果您只是尝试从cg
获取cgu
中没有任何联接行的行,则可以选择cgu.id
为空的地方。>
例如:
SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL