2016-10-03 6 views
0
以下

の値で取得クロスマッチング列があるSQL:両方のフィールド

表ここCOL 1で

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

、シナリオであるいくつかのデータ「1」とCOL 2でありますいくつかのデータ '2'。同じテーブルには、これらの値が入れ替わる別の行があります。どのように私は私が

SELECT a.ID, 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); 

は、しかし、私は知らない、第2のID

答えて

1

を取得する方法を、この本です。このオプションを知っているSQLクエリ

ID_1 | Col 1  | Col 2  |ID_2 
----------------------------------- 
1 | 1   | 2   |3 
----------------------------------- 
2 | 3   | 4   |4 
----------------------------------- 

を使用して、以下のような出力を得ることができるものあなたは欲しいですか?

select a.*, b.id 
from tableA a join 
    tableB b 
    on a.col1 = b.col2 and a.col2 = b.col1 and a.id < b.id; 

これはcol1col2の値が逆になっている所定のIDよりid追加大きいごとに1つの行を返します。ここで

は、これが機能することを実証コードです:

with tablea(id, col1, col2) as (
     values(1, 1, 2), (2, 3, 4), (3, 2, 1), (4, 4, 3) 
    ) 
select a.*, b.id 
from tableA a join 
    tableA b 
    on a.col1 = b.col2 and a.col2 = b.col1 and a.id < b.id; 

それはあなたが指定した正確に何を返します。 HereはSQL Fiddleです。

+0

いいえ、私は、 'col1'と' col2'の値が逆になっている指定されたidより大きい追加の 'id 'ごとに1行を返すことはしません。以下の結果IDを返します。| COL_1 | COL_2 | ID_1 1 | 1 | 2 | 2 3 | 3 | 4 | 4 –

+0

@ShubhajitChanda 。 。コードは機能します。指定した出力が生成されます。 –

関連する問題