使用最低编号在SQL中删除重复项

时间:2019-03-16 06:31:59

标签: mysql sql

我对SQL有疑问。

假设我有一个只有2列的表,它看起来像这样:

col1    col2
--------------
12345   200000
12345   435000
200000  12345
200000  435000
435000  12345
435000  200000
600     1200
600     900
900     600
900     1200
1200    600
1200    900

如何使结果看起来像这样?

col1    col2
---------------
12345   200000
12345   435000
600     900
600     1200

其背后的逻辑是,我想获得最小的数字作为主“键”。 由于12345匹配200000和435000,并且由于12345是最低的,因此它成为匹配其他两个数字的主键。

您可以将其视为ID号。 (12345 = 200000 = 435000)&(600 = 900 = 1200)。由于12345是第一组中最低的,而600是第二组中最低的,所以我只想显示12345和600。

我尝试过:

select col1, col2
from table_name
where col1<col2

但是我有多余的行:

Extra row 1: 200000,435000. 
Extra row 2: 900, 1200.

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询

SELECT IF(col1 < col2, col1, col2) col1,
       IF(col1 >= col2, col1, col2) col2
FROM mytable
GROUP BY IF(col1 < col2, col1, col2),
         IF(col1 >= col2, col1, col2)

获得:

col1    col2
---------------
600     900
600     1200
900     1200
12345   200000
12345   435000
200000  435000

因此,将以上内容用作派生表:

SELECT MIN(col1) col1,
       col2
FROM (       
   SELECT IF(col1 < col2, col1, col2) col1,
           IF(col1 >= col2, col1, col2) col2
   FROM mytable
   GROUP BY IF(col1 < col2, col1, col2),
            IF(col1 >= col2, col1, col2)
) AS t
GROUP BY col2

为您提供了预期的结果:

col1    col2
---------------
600     900
600     1200
12345   200000
12345   435000

Demo here