2015-08-28 12 views
0

У меня есть таблица, и я хочу создать декартову этих данных с самой самой таблицей.Декартово произведение в ту же таблицу в оракуле без дубликата

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 

Но если А Б присутствует я не хочу 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