选择两列一个连接

时间:2016-11-29 18:23:00

标签: sql oracle11g left-join

鉴于此SQL查询:

select A.field1 as field
from A left join B
on A.field1 = B.field1 
union all
select A.field2 as field 
from A left join B
on A.field2 = B.field1;

有几种方法可以用几行来获得相同的效果吗?即:是否有另一种方法可以从表A中获取两列,每一列用表B中的一列分隔,然后两者都放入相同的结果集列中? 需要的原因是真正的查询有一个更复杂的连接和条件,并且有点大,几乎都是多余的。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

使用left join并假设与B的联接不会产生重复项,那么您的查询更简单地写为:

select A.field1 as field from A
union all
select A.field2 from A;

left joinB在这种情况下无效。

我认为您的查询更复杂,或者您打算进行内部联接。您可以在union all 之前执行join

select A.field
from (select field1 from A union all
      select field2 from A
     ) a join
     B
     on A.field = B.field1 ;

这是否具有更差或相同的性能取决于数据的性质。