MySQL为每个IP获取不同的服务

时间:2017-03-30 11:29:32

标签: mysql sql

我有下表:

|    **IP**   | **PORT** | **SERVICE** | **VERSION** |
|:-------:|:----:|:-------:|:-------:|
| 1.2.3.4 |  80  |   HTTP  |   1.1   |
| 1.2.3.4 |  443 |   HTTP  |   1.2   |
| 1.2.3.4 |  25  |   SMTP  |   a     |
| 2.3.4.5 |  80  |   HTTP  |   1.2   |
| 2.3.4.5 |  443 |   HTTP  |   1.2   |
| 2.3.4.5 |  25  |   SMTP  |   a     |
| 3.4.5.6 |  25  |   SMTP  |   b     |
| 3.4.5.6 |  443 |   HTTP  |   1.2   |
| 0.0.0.1 |  25  |   SMTP  |   b     |
| 0.0.0.2 |  443 |   HTTP  |   1.2   |

我希望通过某些IP之间的端口,服务和版本获得不同服务的列表,例如,IP 1.2.3.4,2.3.4.5和3.4.5.6的结果应类似于以下内容:由于这些IP上的其他服务是相同的端口,服务和版本。

IP 1.2.3.4,2.3.4.5和3.4.5.6的不同服务:

|    IP   | PORT | SERVICE | VERSION |
|:-------:|:----:|:-------:|:-------:|
| 1.2.3.4 |  80  |   HTTP  |   1.1   |
| 1.2.3.4 |  25  |   SMTP  |   a     |
| 2.3.4.5 |  80  |   HTTP  |   1.2   |
| 2.3.4.5 |  25  |   SMTP  |   a     |
| 3.4.5.6 |  25  |   SMTP  |   b     |

不确定如何在查询中获取它们。

提前致谢

3 个答案:

答案 0 :(得分:0)

嗯。如果我理解正确,您更关心 ports 而非服务。如果是这样的话:

select t.*
from t
where t.ip in ('1.2.3.4', '2.3.4.5', '3.4.5.6') and
      t.port in (select t2.port from t t2 where t2.ip in ('1.2.3.4', '2.3.4.5', '3.4.5.6'));

答案 1 :(得分:0)

如果我理解正确,则要求按ip和服务进行分组。

select t.*
from t where t.ip in ('1.2.3.4', '2.3.4.5', '3.4.5.6') 
group by ip,service;

答案 2 :(得分:-1)

您可以尝试在IP和SERVICE列上应用组。