WITH ... AS 语句未按预期工作

Fer*_*H-G 2 postgresql cte except

我收到此错误:

WITH...AS 语法错误

当我尝试执行以下查询时出现:

with expensive_service as (
    select s1.*
    from service s1, service s2
    where s1.price > s2.price
)
select * 
from service except expensive_service;
Run Code Online (Sandbox Code Playgroud)

我试图实现WITH ... AS(链接到 PostgreSQL 文档)。

此查询为我提供了所需的输出:

select * 
from service except ( 
    select s1.*
    from service s1, service s2
    where s1.price > s2.price
)
Run Code Online (Sandbox Code Playgroud)

任何指导我错误所在的帮助将不胜感激!

a_h*_*ame 7

CTE(公共表表达式)就像一个视图,您需要像对待任何其他视图(或表)一样对待它。您需要一个完整的 SELECT 语句作为 EXCEPT 的第二部分:

with expensive_service as (
    select s1.*
    from service s1, service s2
    where s1.price > s2.price
)
select * 
from service 
except 
select *
from expensive_service;
Run Code Online (Sandbox Code Playgroud)

需要注意的是一个联盟的各个部分加上括号,除了或INTERSECT不是必需的(除非你需要一个ORDER BY为该查询,例如,由于您使用的是LIMIT子句)。

因此,您的原始查询也可以(在我看来)也可以写成

select * 
from service 
except  
select s1.*
from service s1, service s2
where s1.price > s2.price
Run Code Online (Sandbox Code Playgroud)