没有临时表的子查询

时间:2014-02-05 19:49:33

标签: sql oracle subquery

我遇到了一个我想用临时表解决的问题,但是,我发现这在Oracle中并不是一个好方法。

我从多个表中发出一个select命令并获取Result1。然后,我想将列2,3组合成1列,其中包含来自列2,3的唯一值,例如

    Select distinct(col2) from Result1 
    UNION 
    Select distinct(col3) from Result1
    As Result2

然后我想在子查询中使用Result2中的值。一个简单的方法来完成这个最后一部分,使查询在我的Where子句的上面作为子查询的一部分,但我再也不知道如何引用Result1。所以我想要的是:

      Select * from xyz where col in 
       (Select distinct(col2) from Result1 
        UNION 
        Select distinct(col3) from Result1)

在没有临时表的情况下将这些查询的结果组合在一起的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,您的查询可以写成:

  Select *
  from xyz
  where col in (Select col2 from Result1 union all
                Select col3 from Result1
               )

在这种情况下,in会自动处理重复项。使用with result1

,可以更好地编写以下内容
with result1 as (
      <your query here>
     )
select *
from xyz
where exists (select 1 from result1 r where xyz.col1 = r.col2 or xyz.col1 = r.col3);

这能解决您的问题吗?