如果我尝试对公用表表达式进行 UNION(或 INTERSECT 或 EXCEPT),则会在 UNION 附近出现语法错误。如果我不使用 CTE 而是直接将查询放入联合中,那么一切都会按预期工作。
我可以解决这个问题,但对于一些更复杂的查询,使用 CTE 会使事情变得更具可读性。我也只是不喜欢不知道为什么会失败。
例如,以下查询有效:
SELECT *
FROM
(
SELECT oid, route_group
FROM runs, gpspoints
WHERE gpspoints.oid = runs.start_point_oid
UNION
SELECT oid, route_group
FROM runs, gpspoints
WHERE gpspoints.oid = runs.end_point_oid
) AS allpoints
;
但是这个失败了:错误:在“UNION”或附近出现语法错误第20行:UNION
WITH
startpoints AS
(
SELECT oid, route_group
FROM runs, gpspoints
WHERE gpspoints.oid = runs.start_point_oid
),
endpoints AS
(
SELECT oid, route_group
FROM runs, gpspoints
WHERE gpspoints.oid = runs.end_point_oid
)
SELECT *
FROM
(
startpoints
UNION
endpoints
) AS allpoints
;
合并在一起的数据是相同的,但一个查询失败,另一个查询失败。
我在 Windows 7 上运行 PostgreSQL 9.3。