Stv*_*dll 2 sql postgresql union subquery
我有一个联合查询,我想在联合查询“左侧”的 select 语句中使用联合查询“右侧”的 select 的结果。下面的查询工作正常(至少在 postgres 上),但我运行 query1 两次,一次作为 query1,再次作为 SameAsQuery1。
select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from
(select x as zz from (select 69 as x) as sameAsQuery1) as query2
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情,这样我就不必运行 query1 两次,但它不起作用:
select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from query1
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
错误:关系“query1”不存在第 3 行:从 query1 选择 count(zz) 作为 zz
有没有办法重写这个查询,使 query1 只运行一次?
对 Llama 先生的回复进行小修改效果很好,看起来像这样(注意添加“as q2”):
WITH
query1 AS
(
SELECT x AS zz FROM (SELECT 69 AS x) as q2
)
SELECT zz FROM query1
UNION ALL
SELECT COUNT(zz) AS zz FROM query1
Run Code Online (Sandbox Code Playgroud)
您正在寻找通用表表达式。
它们允许您定义结果并在查询中多次使用它。
在你的第一个案例中:
WITH
query1 AS
(
SELECT x AS zz FROM (SELECT 69 AS x)
)
SELECT zz FROM query1
UNION ALL
SELECT COUNT(zz) AS zz FROM query1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5120 次 |
| 最近记录: |