gpt4 book ai didi

sql - 创建 SQL UNION,其中联合的第二面取决于第一面

转载 作者:行者123 更新时间:2023-11-29 11:48:44 27 4
gpt4 key购买 nike

我想执行两个查询的联合,其中第二个查询取决于第一个:

SELECT * FROM company_res t1
UNION
SELECT * FROM company_res t2
WHERE t2.company_id IN (
SELECT c.id
FROM company c
WHERE c.parent_id = t1.company_id
)
ORDER BY company_id, year_code

但是,当我在 psql 中运行此查询时,我得到一个错误,表明第二个查询中的 t1 确实有一个 FROM 子句。

是否可以UNION 两个查询相互依赖?

最佳答案

根据您的部分示例,我认为您正在尝试制作 recursive query ,而不是经典的 UNION 查询,这是 UNIONS 的高级查询。

您需要对company_res进行一些选择,然后添加这些公司的父公司。

基本形式是:

WITH RECURSIVE t(n) AS (
SELECT 1
UNION ALL
SELECT n+1 FROM t
)
SELECT n FROM t LIMIT 100;

在你的情况下可能是这样的:

WITH RECURSIVE rectable(
company_id,
field2,
field3,
parent_id) AS (
-- here the starting rows, t1 in your example
SELECT
company_res.company_id,
company_res.field2,
company_res.field3,
company.parent_id
FROM company_res
INNER JOIN company ON company_res.company_id=company.id
WHERE (here any condition on the starting points)
UNION ALL
-- here the recursive part
SELECT
orig.company_id,
orig.field2,
orig.field3,
orig.parent_id
FROM rectable rec,company_res orig
INNER JOIN company ON orig.company_id=company.id
WHERE company.parent_id=rec.company_id
-- here you could add some AND sections if you want
)
SELECT company_id,field2, field3,parent_id
FROM rectable
ORDER BY parent_id;

关于sql - 创建 SQL UNION,其中联合的第二面取决于第一面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com