我有一个查询,它会创建一个包含两列整数的结果。
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
的实际选择中实际使用了两次。
答案 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)
之类的操作,但加入可能更清晰(可能更高效,具体取决于优化器对真实查询的处理方式)。