2016-11-11 139 views
1

我有一個查詢可以創建兩列整數的結果。在不使用子查詢的情況下在另一個查詢中使用查詢的結果

from_id | to_id 
--------------- 
    51 | 100 
    3  | 21 
    ... | ... 

讓我們把這個結果map_ids

然後,我可以這樣做

SELECT * FROM some_table st WHERE st.id IN map_ids.to_id 

,只選擇東西從some_table了具有與to_id的結果一致在第一的ID查詢?

我想避免使用子查詢,因爲生成map_ids的查詢非常長,實際上在some_table的實際選擇中使用了兩次。

+0

您是否在尋找[subquery factoring](https://docs.oracle.com/cloud/latest/db112/SQLRF/statements_10002.htm#i2077142)? –

回答

2

這聽起來像你正在尋找subquery factoring。你可以把你的第一個查詢到with條款,然後加入到在主體:

WITH map_ids (from_id, to_id) as (
    ... you first query ... 
) 
SELECT columns 
FROM map_ids mi 
JOIN some_table st ON st.id = mi.to_id 

以後,您可以參考map_ids再次,例如在另一個分支union

你可以做一些類似於where st.id in (select to_id from map_ids)的事情,但加入可能會更清楚(也許更有效,這取決於優化器對真實查詢的作用)。

相關問題