比方說,我有如下表:能否有效地在LEGO OUTER上加入Postgres中左錶行的子集?
table_1 table_2
id_a name id_a id_b
1 c 1 1
2 a 1 2
3 b 2 1
2 2
現在考慮下面的LEFT OUTER JOIN:
SELECT *
FROM table_1
LEFT OUTER JOIN table_2 USING (id_a)
id_a name id_b
1 c 1
1 c 2
2 a 1
2 a 2
3 b
現在想象一下 'FROM TABLE_1' 實際上是一個複雜的子查詢,如:
SELECT * FROM huge_table WHERE expensive_conditions_producing_three_rows
是否可以編寫一個查詢,只使用最小名稱與左行進行連接,而無需完全重新運行子查詢?您可以假定您對子查詢有一定的控制權,即可以根據需要添加ORDER BY。
換句話說,最終的結果應該是這樣的:
id_a name id_b
1 c
2 a 1
2 a 2
3 b
我認爲使用SELECT INTO放置在一個臨時表的子查詢結果。那麼計算JOIN ON條件下使用的最小值就不成問題。但我寧願避免這種情況,除非它是唯一的解決方案。
編輯:我會等幾天,然後接受最好的解決方案,無論PG版本如何。但是,在PG 8.3和更早的版本中工作的人將會非常感激。
試圖使用這些HTTP:// WWW。 postgresql.org/docs/8.4/static/queries-with.html? – 2012-02-02 22:15:05
哪個Postgres版本? – 2012-02-02 23:30:32
我沒有指定一個版本,因爲我想保持這個問題對其他人做類似的事情有用。但我個人很喜歡看到在PG 8.3中有效的東西。 – DNS 2012-02-03 02:02:11