使用 Postgres 版本 9.3 使用多个 WITH 表名 AS (...) 语句



SQL服务器有一个这样的确切问题,但我使用的是Postgres 9.3,','不起作用

我正在比较两个不同的年份。 例如 2016 年和 2015

年我检查用户在 2 年内是否在相同科目上获得了任何不良成绩。

我的代码如下

with currentyeargrade ( 
select ....
from (...
...)t)
with previousyeargrade(
select ....
from (...
...)y)
select *
from currentyeargrade cyg
inner join previousyeargrade pvg on pvg.userid = cyg.userid

我是 SQL 开发人员,我没有创建临时表的管理员权限。

当您使用 CTE 时,您只需要在第一个CTE中写入with并使用逗号,连接多个CTE

with currentyeargrade as ( 
select ....
from (...
...)t),
previousyeargrade as(
select ....
from (...
...)y)
select *
from currentyeargrade cyg
inner join previousyeargrade pvg on pvg.userid = cyg.userid

这是给你的一个示例

CREATE TABLE T(col int);
insert into T values (1);

查询 1

with currentyeargrade as  (SELECT * FROM T), 
previousyeargrade as (SELECT * FROM T)
select *
from previousyeargrade cyg
CROSS JOIN currentyeargrade pvg 

结果

| col | col |
|-----|-----|
|   1 |   1 |

最新更新