1

我有一个表 Net 网络列表在哪里

-- 表:净

CREATE TABLE net
(
  id serial NOT NULL,
  cidr cidr,
  description text,
  CONSTRAINT net_pkey PRIMARY KEY (id )
)

我需要选择所有没有的网络。属于其他网络。即只有没有子网的网络。如何构建查询?

cidr:
10.0.0.0/8
10.1.0.0/16
10.2.0.0/16
10.3.0.0/16
10.3.1.0/24
10.3.2.0/24
10.3.3.0/24
10.15.1.0/24
10.15.2.0/24
10.15.3.0 /24
172.20.0.0/16
172.21.0.0/16
172.0.0.0/8
11.11.11.0/24
最高额定净值为10.0.0.0/8、172.0.0.0/8、11.11.11.0/24

4

1 回答 1

3

我理解您的问题是这样的:您希望所有网络规范都不包含在任何其他网络规范中,即不属于另一个网络规范的一部分。

试试这个:

SELECT *
FROM   net
WHERE  NOT EXISTS (SELECT cidr FROM net n WHERE n.cidr >> net.cidr);

产生您预期的结果。查看手册中的网络地址功能和运算符
一章,了解有关运算符的更多信息。 半连接可能是最快的方法。>>
NOT EXISTS

于 2011-11-15T23:20:05.630 回答