我希望执行两个查询的并集,其中第二个查询首先依赖于:
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
两个相互依赖的查询?
答案 0 :(得分:2)
从你的部分例子中我认为你试图制作一个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;
答案 1 :(得分:0)
您的查询中的SELECT * FROM company_res t1
将为您提供company_res
以外的所有内容,无论您UNION
使用company_res
还是其他内容。我怀疑这就是你要找的东西。请参阅shahkalpesh的答案。