pau*_*dru 2 mysql sql distinct
这是我的域表:
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
-------------|-----------
Run Code Online (Sandbox Code Playgroud)
我想删除重复域的行并保留 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
-------------|-----------
Run Code Online (Sandbox Code Playgroud)
尝试使用INET_ATONand INET_NTOAwithGROUP BY来获取每个域的最少 IP,如下所示:
SELECT
domain, INET_NTOA(MIN(INET_ATON(ip)))
FROM
domains t1
GROUP BY domain;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
请注意,如果某个域有多个行的 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3374 次 |
| 最近记录: |