SQLでの重複レコードを削除します

モハメドロシャン:

私は以下のように同じであるテーブルを持っています。

    |----------|---------|
    |  NAME1   |  NAME2  | 
    |----------|---------|   
    |     R1   |   R2    |  
    |     R3   |   R4    |  
    |     R2   |   R1    |  
    |     R1   |   R5    |  
    |     R4   |   R3    |  
    |--------------------|

しかし、ここで私は同じようタプル(R1、R2)及び(R2、R1)を検討する必要があります。タプル(R1、R2)及び(R2、R1)のうちの一つだけ、この手段は、最終的なテーブルであってもよいです。同様に、(R4、R3)及び(R3、R4)は同じです。この手段は、唯一のタプル(R3、R4)間及び(R4、R3)ファイナルテーブルであってもよいです。

フィナーレの表は、次のようになります。

   |----------|---------|
   |  NAME1   |  NAME2  | 
   |----------|---------|   
   |     R1   |   R2    |  
   |     R3   |   R4    |  
   |     R1   |   R5    |  
   |--------------------|

どのように私はSQLでこれを行うことができますか?

ティムBiegeleisen:

あなたは、ロジックが存在すると削除を使用してみてください可能性があります。

DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.Name2 = t1.Name1 AND t2.Name1 = t1.Name2) AND
      Name1 > Name2;

ここでのアプローチは、逆の順序で名前が表示されます任意のタプルを削除することです。2番目の名前よりも辞書式大きい最初の名前も必要です。

あなただけではなく、したい場合は閲覧データをこのように、その後、少なくとも/最大のトリックを使用します。

SELECT DISTINCT
    LEAST(Name1, Name2) AS Name1,
    GREATEST(Name1, Name2) AS Name2
FROM yourTable;

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=408583&siteId=1