2009-05-25 105 views
12

我想知道,是否有可能將查詢的結果加入自己?子查詢的自加入

(我使用PostgreSQL)

+1

你能提供你想要做什麼的例子嗎? – 2009-05-25 16:48:49

回答

26

你可以用這樣做的:

WITH subquery AS(
    SELECT * FROM TheTable 
) 
SELECT * 
FROM subquery q1 
JOIN subquery q2 on ... 

或通過創建包含查詢一個視圖,並加入對:

SELECT * 
FROM TheView v1 
JOIN TheView v2 on ... 

或蠻力法:輸入子查詢兩次:

SELECT * 
FROM (
    SELECT * FROM TheTable 
) sub1 
LEFT JOIN (
    SELECT * FROM TheTable 
) sub2 ON ... 
+0

根據http://www.postgresql.org/docs/8.3/interactive/unsupported-features-sql-standard.html,PostgreSQL不支持最新版本8.3中的WITH查詢。 – markusk 2009-05-25 17:03:39

+0

如果您可以升級到8.4,目前處於測試階段,WITH終於出現了,請參閱http://www.postgresql.org/docs/8.4/static/queries-with.html – 2009-05-25 17:08:41

2

您的意思是,對錶進行查詢的結果,對同一張表。如果是這樣,那麼是的,這是可能的。

--Bit of a contrived example but... 
SELECT * 
FROM Table 
INNER JOIN 
(
    SELECT 
      UserID, Max(Login) as LastLogin 
    FROM 
      Table 
    WHERE 
      UserGroup = 'SomeGroup' 
    GROUP BY 
      UserID 

) foo 
ON Table.UserID = Foo.UserID AND Table.Login = Foo.LastLogin 
0

是的,只是別名查詢:

SELECT * 
FROM (
     SELECT * 
     FROM table 
     ) t1 
JOIN (
     SELECT * 
     FROM table 
     ) t2 
ON  t1.column < t2.other_column