我正在尝试从IP地址存储在范围中的数据库中选择多个IP地址的IP信息。数据库中的简单行如下所示:
ip_from | ip_to | country_code | city_name
----------+----------+--------------+-----------
0 | 16777215 | - | -
16777216 | 16777471 | AU | Brisbane
16777472 | 16778239 | CN | Fuzhou
我需要编写一个查询,在其中我可以将IP列表作为整数传递(例如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;
答案 0 :(得分:2)
您可以加入由VALUES
生成的集合。
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
中找不到匹配项的行,请将左侧联接更改为内部联接。
答案 1 :(得分:0)
使用IN关键字。
SELECT * FROM ip_table在ip_to IN(16777221,16777490)