La eliminación de registros duplicados en SQL

Muhammed Roshan:

Tengo una tabla que es la misma de la siguiente manera.

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

Pero aquí tengo que considerar tuplas (R1, R2) y (R2, R1) como lo mismo. Esto significa que sólo una entre las tuplas (R1, R2) y (R2, R1) pueden estar en la mesa final. Del mismo modo, (R4, R3) y (R3, R4) es el mismo. Esto significa que sólo uno entre tuplas (R3, R4) y (R4, R3) pueden estar en la tabla final.

mesa final debería tener este aspecto.

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

¿Cómo puedo hacer esto con SQL?

Tim Biegeleisen:

Usted puede intentar usar un borrado con la lógica que existe:

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

El enfoque aquí es eliminar cualquier tupla que aparece con los nombres en orden inverso. El primer nombre que es lexicográfico mayor que el segundo nombre es también un requisito.

Si en lugar de sólo quiere ver sus datos de esta manera, a continuación, utilizar un truco más grande menos /:

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=408586&siteId=1
Recomendado
Clasificación