这是我的域表:
domain | ip
-------------|-----------
example.com | 0.0.0.0
-------------|-----------
example1.com | 1.1.1.1
-------------|-----------
example2.com | 2.2.2.2
-------------|-----------
example3.com | 3.3.3.3
-------------|-----------
example2.com | 9.9.9.9
-------------|-----------
example4.com | 4.4.4.4
-------------|-----------
example3.com | 3.3.3.3
-------------|-----------
我想删除重复域的行并保留 ip 的第一个值,所以我最终必须有一个这样的表:
domain | ip
-------------|-----------
example.com | 0.0.0.0
-------------|-----------
example1.com | 1.1.1.1
-------------|-----------
example2.com | 2.2.2.2
-------------|-----------
example3.com | 3.3.3.3
-------------|-----------
example4.com | 4.4.4.4
-------------|-----------
最佳答案
尝试使用 INET_ATON
和 INET_NTOA
以及 GROUP BY
来为每个域获取最少的 IP,如下所示:
SELECT
domain, INET_NTOA(MIN(INET_ATON(ip)))
FROM
domains t1
GROUP BY domain;
MIN(IP)
不会按您预期的方式工作。
您可以像这样使用上面的方法执行删除:
DELETE t1 FROM domains t1
INNER JOIN
(SELECT
domain, INET_NTOA(MIN(INET_ATON(ip))) ip
FROM
domains t1
GROUP BY domain) t2 ON t1.domain = t2.domain AND t1.ip <> t2.ip;
请注意,如果域中有多行具有最少 IP 的行,则将保留所有行。
您也可以创建一个新表来存储不同的行:
CREATE TABLE domains_new(domain varchar(100), IP varchar(30))
SELECT
domain, INET_NTOA(MIN(INET_ATON(ip)))
FROM
domains t1
GROUP BY domain;
关于MySql 删除具有重复列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771249/