2016-11-11 140 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)的事情,但加入可能会更清楚(也许更有效,这取决于优化器对真实查询的作用)。

相关问题