我在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/

10-12 17:51
查看更多