怎么在 select 子句中使用 join in from 子句(如 SQL Server)执行 Postgresql 子查询?

本教程将介绍如何在 select 子句中使用 join in from 子句(如 SQL Server)执行 Postgresql 子查询?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么在 select 子句中使用 join in from 子句(如 SQL Server)执行 Postgresql 子查询? 教程 第1张

问题描述

我正在尝试在 postgresql 上编写以下查询:

select name, author_id, count(1), 
 (select count(1)
 from names as n2
 where n2.id = n1.id
  and t2.author_id = t1.author_id
 )
from names as n1
group by name, author_id

这当然可以在 Microsoft SQL Server 上运行,但在 postegresql 上根本不行.我稍微阅读了它的文档,似乎可以将其重写为:

select name, author_id, count(1), total
from names as n1, (select count(1) as total
 from names as n2
 where n2.id = n1.id
  and n2.author_id = t1.author_id
 ) as total
group by name, author_id

但是在 postegresql 上返回以下错误:FROM 中的子查询不能引用相同查询级别的其他关系".所以我被困住了.有谁知道我怎样才能做到这一点?

谢谢

推荐答案

我不确定我是否完全理解你的意图,但也许以下内容会接近你想要的:

select n1.name, n1.author_id, count_1, total_count
  from (select id, name, author_id, count(1) as count_1
 from names
 group by id, name, author_id) n1
inner join (select id, author_id, count(1) as total_count
  from names
  group by id, author_id) n2
  on (n2.id = n1.id and n2.author_id = n1.author_id)

不幸的是,这增加了按 id 以及 name 和 author_id 对第一个子查询进行分组的要求,我认为这是不想要的.不过,我不确定怎么解决这个问题,因为您需要有可用的 id 才能加入第二个子查询.也许其他人会想出更好的解决方案.

分享和享受.

好了关于怎么在 select 子句中使用 join in from 子句(如 SQL Server)执行 Postgresql 子查询?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。