【问题标题】:Simplifying an inequality for an SQL query简化 SQL 查询的不等式
【发布时间】:2010-12-31 21:06:40
【问题描述】:

作为参考,这个问题令人困惑,所以感谢所有帮助解决这个问题的人。

我正在尝试在事件长度不同的预订程序中定位潜在的事件冲突。

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≤ y) || (a ≥ x && e ≥ y)

我正在使用 DataMapper 来完成此操作,但我之前的查询是错误的。然后我想出了上述内容,但我不确定如何将其转换为查询。下面是我对reference不正确查询。

class Table
  def is_available?
     return false if (TableBooking.all(:at.lte => params[:at], :at.gt => params[:ending], :ending.gt => params[:at], :ending.gte => params[:at]).count > 0)
  end
end

【问题讨论】:

  • 这个比较对我来说毫无意义——除了 x 和 y 点之外,前两个比较是互斥的。随后的测试会检查其他范围,但四个范围之一将返回 true。
  • 正是我的想法 OMG,测试总是正确的!

标签: sql ruby logic datamapper


【解决方案1】:

我想你真正想要的是这样的:

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)

既然这样占(对应于上面的每个组)...

  1. a,e 包括 x,y
  2. a,e 包含在 x,y 中
  3. a,e 在 x,y 之前开始,但在 x,y 之前不结束
  4. a,e 在 x,y 之后结束,但不在 x,y 之后开始

前两个部分与您的原始部分相同,但我不得不更改后两个部分以使其有意义且正确。

这其实也可以简化,因为#3和#4会自动捕捉到#1,所以你真的只需要#2-4:

(a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)

【讨论】:

  • 太棒了,我需要拿起我关于符号逻辑的书阅读。
【解决方案2】:

你给出的不等式可以简化为

(a ≤ x || a ≥ x) && (e ≤ y || e ≥ y)  

可以进一步简化为

True

这可能是代码不起作用的原因。

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多