当我尝试对这两个查询执行联合时,我有两个查询,其中包含同名的公共 ctes,它给了我 “sqlalchemy.exc.CompileError:发现多个不相关的同名 CTE”错误
我想对这两个查询的结果进行联合,如果有办法处理这个错误,请分享。这就是我尝试执行联合操作的方式
sa.union( history_stmt,
future_stmt
)
我想实现以下查询,但是当我尝试以编程方式对两个查询执行 sa.union 时,出现以下错误
sqlalchemy.exc.CompileError:发现多个不相关的 CTE 同名:'种子'
有什么办法可以使联合查询工作而无需保留不同的名称。
WITH seed AS (
SELECT
*
FROM
SEEDD_MATERIALIZED
WHERE
LOCATION_ID = 7
AND PRODUCT_ID = 29
),
history AS(
SELECT
*
FROM
history_table
)
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN history
ON
seed.cluster_id = history.cluster_id
UNION
WITH seed AS (
SELECT
*
FROM
SEED_MATERIALIZED
WHERE
LOCATION_ID = 7
AND PRODUCT_ID = 29
),
future AS(
SELECT
*
FROM
future_table
WHERE
strategy_id = 4
)
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN future
ON
seed.cluster_id = future.cluster_id
您能否尝试先定义 CTE,然后在联合类中引用它们:
WITH seed AS (
SELECT
*
FROM
SEED_MATERIALIZED
WHERE
LOCATION_ID = 7
AND PRODUCT_ID = 29
),
history AS (
SELECT
*
FROM
history_table
),
future AS (
SELECT
*
FROM
future_table
WHERE
strategy_id = 4
)
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN history
ON
seed.cluster_id = history.cluster_id
UNION
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN future
ON
seed.cluster_id = future.cluster_id
另外,不需要未来和历史CTE:
WITH seed AS (
SELECT
*
FROM
SEED_MATERIALIZED
WHERE
LOCATION_ID = 7
AND PRODUCT_ID = 29
)
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN history_table
ON
seed.cluster_id = history_table.cluster_id
UNION
SELECT
PROFIT
FROM
seed
LEFT OUTER JOIN future_table
ON
seed.cluster_id = future_table.cluster_id
AND future_table.strategy_id = 4