我有一张表,我想用相同的表本身生成该数据的笛卡儿。
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
答案 0 :(得分: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);