2016-11-11 9 views
1

私は2つの列のintで結果を作成するクエリを持っています。サブクエリなしで別のクエリでクエリの結果を使用

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

最初にto_idの結果と一致するIDを持っているのは、その後map_ids

この結果を呼びましょう、私はsome_tableからのみ選択のものに

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

ような何かを行うことができますクエリ?

map_idsを生成するクエリは実際にはsome_tableから実際のセレクトで2回使用されるため、サブクエリは使用しないでください。

+0

[サブクエリ・ファクタリング](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)のようにすることができますが、結合はおそらくより明確です(そして、オプティマイザが実際のクエリで行うことに応じてより効率的です)。

関連する問題