【发布时间】:2016-09-06 11:49:42
【问题描述】:
我正在尝试横向处理 Postgres 9.5.3 查询。
select b_ci."IdOwner",
ci."MinimumPlaces",
ci."MaximumPlaces",
(select count(*) from "LNK_Stu_CI" lnk
where lnk."FK_CourseInstanceId" = b_ci."Id") as "EnrolledStudents",
from "Course" c
join "DBObjectBases" b_c on c."Id" = b_c."Id"
join "DBObjectBases" b_ci on b_ci."IdOwner" = b_c."Id"
join "CourseInstance" ci on ci."Id" = b_ci."Id",
lateral (select ci."MaximumPlaces" - "EnrolledStudents") x
我希望最右边的列是该行的“MaximumPlaces”-“EnrolledStudents”的结果,但我正在努力让它发挥作用。目前 PG 正在抱怨“EnrolledStudents”不存在——这正是“横向”的意义所在,不是吗?
select b_ci."IdOwner",
ci."MinimumPlaces",
ci."MaximumPlaces",
(select count(*) from "LNK_Stu_CI" lnk
where lnk."FK_CourseInstanceId" = b_ci."Id") as "EnrolledStudents",
lateral (select "MaximumPlaces" - "EnrolledStudents") as "x"
from "Course" c
join "DBObjectBases" b_c on c."Id" = b_c."Id"
join "DBObjectBases" b_ci on b_ci."IdOwner" = b_c."Id"
join "CourseInstance" ci on ci."Id" = b_ci."Id"
如果我尝试在 select 中内联横向子句(如上所示),它也会感到不安并给我一个语法错误 - 那么它去哪里了?
谢谢,
亚当。
【问题讨论】:
-
不确定我是否理解。如果我注释掉“横向”行,它会起作用。
-
这里还需要
lateral吗?不只是(ci."MaximumPlaces" - "EnrolledStudents") as "SomeLabel"工作吗? -
错误:列“EnrolledStudents”不存在 - 无法引用生成的列。正如我所说,我认为这就是横向的 - 它相当于 sql server 的交叉应用。
标签: postgresql