我在postgresql 8.3数据库上。我试图找出错误在下面的查询中的位置。我试图设计一个查询,以仅选择作为私有地址的源IP和目标IP。
出于某种原因,在下面的查询中获取的地址之一是地址208.117.252.39,它不是私有地址。
下面查询中的逻辑是否有问题,使它也可以选择公共IP地址?
select source_ip, destination_ip
from ip_table
where
(
inet '10/8' >> source_ip
or inet '192.168/16' >> source_ip
or source_ip >= inet '172.16/16' and source_ip < inet '172.32/16'
)
and inet '10/8' >> destination_ip
or inet '192.168/16' >> destination_ip
最佳答案
你需要对你的最终条件进行适当的分组。现在,最后一个“或”忽略了所有的source_ip
条件。
按如下方式构造查询:
select source_ip, destination_ip
from ip_table
where
(
inet '10/8' >> source_ip
or inet '192.168/16' >> source_ip
or inet '172.16/12' >> source_ip
)
and (
inet '10/8' >> destination_ip
or inet '192.168/16' >> destination_ip
or inet '172.16/12' >> destination_ip
);
注意destination子句被组合在一起。
关于postgresql - SQL查询选择公共(public)IP地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15694047/