postgres错误42803与子查询和组by



各位postgres开发人员好,

下面的代码可以运行成功

select p.* from
(select p.*, count(distinct p1.id) n from TMB p
left join TMB p1 on p.id = p1.pid
left join TUR u on p.id = any(u.jks)
group by p.id) p
join TUR u on u.id = p.uid

but,下面的代码有错误消息[42803] ERROR: column "p.xxxx" must appear in the GROUP BY clause or be used in an aggregate function

select p.* from
(select p.*, count(distinct p1.id) n from (select * from TMB) p
left join TMB p1 on p.id = p1.pid
left join TUR u on p.id = any(u.jks)
group by p.id) p
join TUR u on u.id = p.uid

我想在左连接之前在TMB表上做一些过滤器,这样我认为可以加快左连接。

我认为(select * from TMB)是一个等于TMB的子查询。我不明白为什么这个错误信息。有人能告诉我细节吗?

不同的是,没有子查询,PostgreSQL可以推断出idtmb的主键,所以你不需要将tmb的所有列都添加到GROUP BY子句中。对于子查询,PostgreSQL不能做这样的推断,所以你必须添加所有的列。

最新更新