SQL:获取交叉匹配列

时间:2013-10-12 03:50:21

标签: sql oracle

以下是该方案,

表A

---------------------
| Col 1     | Col 2  
---------------------
| 1         | 2      
---------------------
| 3         | 4           
---------------------
| 2         | 1             
---------------------
| 4         | 3           
---------------------

在第1栏中,有一些数据' 1'在第2栏中有一些数据' 2'。在同一个表中,还有另一行,这些值互换。 如何使用SQL查询

获得如下输出

输出

--------------------------
| Col 1     | Col 2      |
--------------------------
| 1         | 2          |
--------------------------
| 3         | 4          |
--------------------------

任何人都可以帮我写这个SQL查询吗?

1 个答案:

答案 0 :(得分:4)

一个选项是

SELECT a.col1, a.col2
  FROM tableA a
 WHERE NOT EXISTS( SELECT 1
                     FROM tableA b
                    WHERE a.col1 = b.col2
                      AND a.col2 = b.col1
                      AND a.col1 > b.col1 );

产生你想要的输出

SQL> ed
Wrote file afiedt.buf

  1  with tableA as (
  2    select 1 col1, 2 col2 from dual union all
  3    select 3, 4 from dual union all
  4    select 2, 1 from dual union all
  5    select 4, 3 from dual
  6  )
  7      SELECT a.col1, a.col2
  8        FROM tableA a
  9       WHERE NOT EXISTS( SELECT 1
 10                           FROM tableA b
 11                          WHERE a.col1 = b.col2
 12                            AND a.col2 = b.col1
 13*                           AND a.col1 > b.col1 )
SQL> /

      COL1       COL2
---------- ----------
         1          2
         3          4