在不使用子查询的情况下在另一个查询中使用查询的结果
问题描述:
我有一个查询可以创建两列整数的结果。在不使用子查询的情况下在另一个查询中使用查询的结果
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
的实际选择中使用了两次。
答
这听起来像你正在寻找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)
的事情,但加入可能会更清楚(也许更有效,这取决于优化器对真实查询的作用)。
您是否在寻找[subquery factoring](https://docs.oracle.com/cloud/latest/db112/SQLRF/statements_10002.htm#i2077142)? –