我正在尝试从存储IP地址范围的数据库中选择多个IP地址的IP信息。DB中的简单行如下所示:
ip_from | ip_to | country_code | city_name
----------+----------+--------------+-----------
0 | 16777215 | - | -
16777216 | 16777471 | AU | Brisbane
16777472 | 16778239 | CN | Fuzhou我需要编写一个查询,其中我可以将I列表作为整数传递,例如(16777221,16777490),它应该返回如下所示的结果:
ip | country_code | city_name
----------+--------------+-----------
16777221 | AU | Brisbane
16777490 | CN | Fuzhou目前,我通过以下查询获取一个IP地址的信息:select * from ip_table where 16777221 <= ip_to order by ip_to limit 1;
发布于 2019-04-18 03:18:48
您可以加入使用VALUES生成的set。
SELECT v.ip,
i.country_code,
i.city_name
FROM (VALUES (16777221),
(16777490)) v (ip)
LEFT JOIN ip_table i
ON i.ip_from <= v.ip
AND i.ip_to >= v.ip;如果要排除在ip_table中找不到匹配项的行,请将左联接更改为内联接。
发布于 2019-04-18 03:10:48
使用IN关键字。
SELECT * FROM ip_table WHERE ip_to IN (16777221,16777490)
https://stackoverflow.com/questions/55734400
复制相似问题