假设我有以下表格:
ip | value
2379284488 | 2
2379284482 | 4
3226028805 | 3
我有一个包含两个整数的列表,3226028800 和 2379284480,我想创建一个具有与此类似的输出的查询:
net | ip | value
2379284480 | 2379284488 | 2
2379284480 | 2379284482 | 4
3226028805 | 3226028805 | 3
哪里
net & ip = net
。在 PostgreSQL 中的单个查询中执行此操作的最简单方法是什么?
您可以像下面的代码一样简单地加入他们:
WITH subnet_list AS (
SELECT unnest(ARRAY[3226028800, 2379284480]) AS subnet
)
SELECT
SL.subnet AS net,
ip_table.ip,
ip_table.value
FROM
subnet_list SL
JOIN
ip_table ON (ip_table.ip & SL.subnet) = SL.subnet;
这里是示例小提琴链接