2015-08-28 78 views
0

我有一張表,我想用相同的表本身產生該數據的笛卡爾。笛卡爾積對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 

回答

2

你是非常接近的。只要改變你的!=<

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); 
+0

謝謝...它解決了我的問題... – user5073139