2011-10-22 9 views
3

我。就像執行兩個查詢的聯合,其中第二查詢取決於第一:創建SQL UNION所在工會的第二面取決於第一面

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兩個相互依賴的查詢?

+3

你到底想幹什麼?從概念上講,您發佈的查詢似乎沒有任何意義。也許發佈一些示例數據和期望的結果。 –

回答

0

您的查詢中的SELECT * FROM company_res t1將向您提供company_res中的所有內容,無論您與company_res之間的其他內容爲UNION。我懷疑這就是你要找的。看到shahkalpesh的答案。

2

從您的部分示例中,我認爲您正在嘗試製作一個recursive query,而不是經典的UNION查詢,如果是事實,則這是UNION的一個優點。

您需要在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; 
+0

+1可能這是OP的結果! –

相關問題