我有一个表,我想用相同的表本身生成该数据的笛卡尔坐标
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);