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;