0

我有一个 where 子句,它基本上将我的表分成两个列表。一个列表,其中所有字段都是“完整的”(非 -1),然后是任何字段不完整的列表。问题是这些字段中的一个不仅可以为空,而且如果另一个字段为真,我也只想将其视为不完整。

Where 子句:

//l and p are my two tables(This is in a join)
//passed in an option incompletes. If incompletes is true, give back incomplete values
where(
  //SHOW INCOMPLETES
  (
    p.attr1 === -1 or
    p.attr2 === -1 or
    p.attr3 === -1 or
    //only need to check attr4 if this var is true
    (p.attr4 === -1).inhibitWhen(!l.needToCheckAttr4) //I've also tried === Some(-1)
    ).inhibitWhen(!incompletes.isDefined) and
  // SHOW COMPLETES
  (
    p.price <> -1 and
    p.serverCost <> -1 and
    p.depreciation <> -1 and
    (p.attr4 <>  -1).inhibitWhen(!l.needToCheckAttr4)
    ).inhibitWhen(incompletes.isDefined)
  )

attr4 行似乎没有效果,而其余条件都正常工作。也就是说,只要其他条件为真,它就会呈现为完整的。

编辑:所以这绝对与调用抑制时有关。在一行中使用两个不同的表(l 和 p)有什么问题吗?

4

1 回答 1

1

好的,所以我放弃了 inhibitorWhen 并使用了

(p.attr4 === -1 and l.needToCheckAttr4 === true)

和...

((p.attr4 <>  -1 and l.needToCheckAttr4 === true) or (l.needToCheckAttr4 === false))

我可能一开始就应该这样做。

于 2013-06-28T19:24:44.977 回答