各位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可以推断出id
是tmb
的主键,所以你不需要将tmb
的所有列都添加到GROUP BY
子句中。对于子查询,PostgreSQL不能做这样的推断,所以你必须添加所有的列。