Java 在2列表格中插入非重叠范围

Java 在2列表格中插入非重叠范围,java,javascript,sql,algorithm,Java,Javascript,Sql,Algorithm,我有一个包含两列的数据库表 +-------+-------+ |min |max | +-------+-------+ |0 |99,999 | +-------+-------+ |100000 |499999 | +-------+-------+ |1000000|9999999| +-------+-------+ 我需要实现一个只允许输入非重叠的rangemin,max的逻辑。例如,不允许5500000,但应允许500000900000 逻辑可以用JAVA、

我有一个包含两列的数据库表

+-------+-------+
|min    |max    |
+-------+-------+
|0      |99,999 |
+-------+-------+
|100000 |499999 |
+-------+-------+
|1000000|9999999|
+-------+-------+
我需要实现一个只允许输入非重叠的rangemin,max的逻辑。例如,不允许5500000,但应允许500000900000

逻辑可以用JAVA、SQL或JS实现。

最简单的示例:


正如已经指出的,问题在于范围,而不是检测单点包含。然而,这只是一个详细的说明,因为rangemin,max应该返回true,当且仅当min和max都不包含时-您只需测试这两个点,或者,如果数据库端点中的某个范围包含在rangemin.max中,您也可以测试。也没有必要对所有内容进行循环。您应该能够使用数据库功能快速找到端点。假设min和max列上有索引,那么算法的顺序将是Olog N,其中N是数据库中的行数,而不是搜索每一行时的on

假设rangemin,max产生了两个变量range\u min和range\u max,我想你可以这样做

select count(*) from min_max_table mmt where
   range_min > mmt.min and range_min < mmt.max or
   range_max > mmt.min and range_max < mmt.max or
   mmt.min > range_min and mmt.min < range_max or
   mmt.max > range_min and mmt.max < range_max
   limit 1;

如果此选择的结果为0,则allowed为true,否则为false。

您尝试了如下操作:。。。没有什么完全我需要实现一个逻辑——你这么说真好!但是有什么问题吗,或者你只是在寻找一个天真的工作者来做这件事吗?顺便说一句,max应该存储为一个排他的值——第一行应该是0 | 100000,第二行应该是100000 | 500000,等等。特别是如果你查询的不是整数计数的任何东西,这使得范围查询安全,而不是丢失随机值。如果您只有现有的连续范围,并且由具有某些特性的db支持,这实际上允许导出上限。我不认为这是解决方案。他在谈论输入范围。
select count(*) from min_max_table mmt where
   range_min > mmt.min and range_min < mmt.max or
   range_max > mmt.min and range_max < mmt.max or
   mmt.min > range_min and mmt.min < range_max or
   mmt.max > range_min and mmt.max < range_max
   limit 1;