如何获取 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
子句中使用聚合函数。有关 WHERE
和 HAVING
之间差异的更多信息,请参阅 this question。
但是,如果您只是想获取 cg
中没有来自 cgu
的任何连接行的行,您可以 select 其中 cgu.id
为空。
例如:
SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL
我正在尝试获取 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
子句中使用聚合函数。有关 WHERE
和 HAVING
之间差异的更多信息,请参阅 this question。
但是,如果您只是想获取 cg
中没有来自 cgu
的任何连接行的行,您可以 select 其中 cgu.id
为空。
例如:
SELECT cg
FROM App:ChannelGroup cg
LEFT JOIN cg.channelGroupUsers cgu
WHERE cgu.id IS NULL