在另一个查询中使用查询结果而不进行子查询

时间:2016-11-11 08:07:17

标签: oracle

我有一个查询,它会创建一个包含两列整数的结果。

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中选择ID与第一个查询中to_id的结果相匹配的内容?

我想避免使用子查询,因为生成map_ids的查询很长,并且在some_table的实际选择中实际使用了两次。

1 个答案:

答案 0 :(得分: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)之类的操作,但加入可能更清晰(可能更高效,具体取决于优化器对真实查询的处理方式)。