具有各种BETWEEN子句的SQL查询

Alirakiyan

假设我有一张公司表。(ID,名称,...,多个IP范围)

每个公司都有一些IP范围(不同范围的IP范围)

一些公司可能只有两个IP范围,例如1.1.1.1-2.2.2.2,3.3.3.3-4.4.4.4

其他公司可能会有更多IP范围。(1.1.1.1-2.2.2.2,3.3.3.3-4.4.4.4,5.5.5.5-6.6.6.6 ...)

我考虑过另一张有关IP范围的表​​格。(一对多关系)。

问题是,给定了一个任意IP,我应该找到给定IP属于其IP范围的公司。

我怎样才能做到这一点?

例如,如果我们只有两个IP范围(from_1,to_1,from_2,to_2,我们可以编写WHERE (x BETWEEN from_1 AND to_1) OR (x BETWEEN from_2 AND to_2)。但是我们有VARIANT IP范围。有些公司可能具有3或4个IP范围。一种方法是为20个列创建一个10个IP范围。from_1,to_1,from_2,to_2,from_3,to_3 ...还有其他方法吗?如果某个公司的IP范围超过10个怎么办?

耶利佛

典型的IP是ABCD,每个A,B,C,D都是1字节的整数,其值从0到255,因此您可以将IP视为以256为底的四位数数字。让我们将其转换为整数:

A*255^3 + B*255^2 + C*255 + D

将IP范围的int值保存到db(2列,FROM和TO)中,例如范围为1.1.1.1-2.2.2.2的示例,保存:

FROM = 1*255^3 + 1*255^2 + 1*255 + 1 = 16646656 

TO = 2*255^3 + 2*255^2 + 2*255 + 1 = 33293312

现在,通过给定IP,还将其转换为上述整数(假设int值为x),并查询:

SELECT Name FROM IP INNER JOIN COMPANY ON IP.CompanyId = COMPANY.Id
WHERE x BETWEEN `FROM` AND `TO`

例子:

公司

--------------------
| Id | Name        |
--------------------
| 1  | Google      |
--------------------
| 2  | Microsoft   |
--------------------

IP

----------------------------------------
| Id | CompanyId | From     | To       |
----------------------------------------
| 1  | 1         | 16646656 | 33293312 |
----------------------------------------
| 2  | 1         | 11235468 | 15612545 |

例如,给定的IP为17654343,

  SELECT * FROM IP INNER JOIN COMPANY ON IP.CompanyId = COMPANY.Id
  WHERE 17654343 BETWEEN `FROM` AND `TO`

结果:

Google

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在where子句中具有相关子查询的SQL查询

来自分类Dev

Sqoop导入具有带where子句的SQL查询

来自分类Dev

具有不同where子句的多个sql查询

来自分类Dev

具有两个like子句的SQL查询

来自分类Dev

SQL具有子句的问题

来自分类Dev

SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

来自分类Dev

在where子句中具有解码和比较的SQL查询

来自分类Dev

具有OR子句和仅一个参数的SQL查询

来自分类Dev

“ WHERE”子句中具有NEWID()的奇数SQL Server(TSQL)查询结果

来自分类Dev

具有WHERE子句和Null的SQL Server参数化查询

来自分类Dev

“ WHERE”子句中具有NEWID()的奇数SQL Server(TSQL)查询结果

来自分类Dev

具有不同 where 子句的两个 SQL Server 查询

来自分类Dev

Sql 查询以比较由于组子句而具有不同值的相同字段

来自分类Dev

SQL 查询未显示具有多个 AND 和 OR 子句的所需结果

来自分类Dev

与查询具有相同WHERE子句的子查询

来自分类Dev

使用between子句时,SQL查询未返回所有值

来自分类Dev

带有not not子句的SQL select查询

来自分类Dev

SQL Where子句具有多个值

来自分类Dev

具有多个WHERE子句的SQL RANK

来自分类Dev

SQL左连接具有hading子句

来自分类Dev

具有聚合功能的SQL HAVING子句?

来自分类Dev

SQl具有子句Min方法无效

来自分类Dev

具有having子句的sql问题

来自分类Dev

带有LINQ查询子查询的not in子句的SQL查询

来自分类Dev

具有非常大的IN子句的SQL Server查询在活动监视器中导致大量查询

来自分类Dev

具有自定义ON子句的MySQL JOIN子查询

来自分类Dev

在相关对象中具有LIKE子句的GreenDao查询

来自分类Dev

where子句中具有聚合的复杂查询

来自分类Dev

查询生成器:具有复合列的IN子句

Related 相关文章

  1. 1

    在where子句中具有相关子查询的SQL查询

  2. 2

    Sqoop导入具有带where子句的SQL查询

  3. 3

    具有不同where子句的多个sql查询

  4. 4

    具有两个like子句的SQL查询

  5. 5

    SQL具有子句的问题

  6. 6

    SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

  7. 7

    在where子句中具有解码和比较的SQL查询

  8. 8

    具有OR子句和仅一个参数的SQL查询

  9. 9

    “ WHERE”子句中具有NEWID()的奇数SQL Server(TSQL)查询结果

  10. 10

    具有WHERE子句和Null的SQL Server参数化查询

  11. 11

    “ WHERE”子句中具有NEWID()的奇数SQL Server(TSQL)查询结果

  12. 12

    具有不同 where 子句的两个 SQL Server 查询

  13. 13

    Sql 查询以比较由于组子句而具有不同值的相同字段

  14. 14

    SQL 查询未显示具有多个 AND 和 OR 子句的所需结果

  15. 15

    与查询具有相同WHERE子句的子查询

  16. 16

    使用between子句时,SQL查询未返回所有值

  17. 17

    带有not not子句的SQL select查询

  18. 18

    SQL Where子句具有多个值

  19. 19

    具有多个WHERE子句的SQL RANK

  20. 20

    SQL左连接具有hading子句

  21. 21

    具有聚合功能的SQL HAVING子句?

  22. 22

    SQl具有子句Min方法无效

  23. 23

    具有having子句的sql问题

  24. 24

    带有LINQ查询子查询的not in子句的SQL查询

  25. 25

    具有非常大的IN子句的SQL Server查询在活动监视器中导致大量查询

  26. 26

    具有自定义ON子句的MySQL JOIN子查询

  27. 27

    在相关对象中具有LIKE子句的GreenDao查询

  28. 28

    where子句中具有聚合的复杂查询

  29. 29

    查询生成器:具有复合列的IN子句

热门标签

归档