在oracle中对同一个表进行笛卡尔积,没有重复



我有一个表,我想用相同的表本身生成该数据的笛卡尔坐标

TABLE:  TEMP_TEST
         FROM_COL   
        --------------
            A      
            B   
            C   

如果我写下面的查询笛卡尔,那么我得到输出

     SELECT A.FROM_COL FROM_COL1,
  B.FROM_COL FROM_COL2
FROM TEMP_TEST A,
  TEMP_TEST B
WHERE A.FROM_COL!=B.FROM_COL ; 

输出
 FROM_COL1 FROM_COL2
    A              B
    A              C
    B              A
    B              C
    C              A
    C              B

但是如果A到B存在,我不想要B到A,我怎么能写一个查询呢?

我需要以下输出

FROM_COL1 FROM_COL2
        A              B
        A              C
        B              C

你很接近了。把你的!=改成<:

with temp_test as (select 'A' from_col from dual union all
                   select 'B' from_col from dual union all
                   select 'C' from_col from dual)
select a.from_col from_col1,
       b.from_col from_col2
from   temp_test a,
       temp_test b
where  a.from_col < b.from_col;
FROM_COL1 FROM_COL2
--------- ---------
A         B        
A         C        
B         C        

它会更好。如果您使用ANSI连接语法重写查询,则更具可读性/行业标准),但是:

select a.from_col from_col1,
       b.from_col from_col2
from   temp_test a
       inner join temp_test b on (a.from_col < b.from_col);

相关内容

  • 没有找到相关文章

最新更新