作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我尝试 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 行:联合
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
;
被 UNION 在一起的数据是相同的,但是一个查询失败而另一个没有。
我在 Windows 7 上运行 PostgreSQL 9.3。
最佳答案
问题是因为 CTE 不是直接文本替换,a UNION b
无效 SELECT syntax . SELECT 关键字是解析的强制性部分,语法错误在甚至不考虑 CTE 之前就出现了。
这就是为什么
SELECT * FROM a
UNION
SELECT * FROM b
作品;语法有效,然后在表位置使用 CTE(由 a
和 b
表示)(通过 with_query_name
)。
关于postgresql - 当a和b是CTE时如何执行 "a UNION b"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412218/
我是一名优秀的程序员,十分优秀!