包含greaterThanEqual(gte)或lessThanEqual(lte)的Squeryl查询给出错误/无结果

Posted

技术标签:

【中文标题】包含greaterThanEqual(gte)或lessThanEqual(lte)的Squeryl查询给出错误/无结果【英文标题】:Squeryl Query containing greaterThanEqual (gte) or lessThanEqual (lte) give wrong/no results 【发布时间】:2011-06-14 12:19:18 【问题描述】:

我正在尝试使用 squeryl 进行简单查询。但是它不起作用!代码编译但查询没有返回结果,但它应该!空白 SQL 中的相同查询完美运行。 SELECT * FROM tablename WHERE position <= 83172924

val qryResult = from(DBName.tablename)(t => where(t.position === 83172924) select (t)) //works! but not what i want
val qryResult = from(DBName.tablename)(t => where(t.position <= 83172924) select (t)) //compile OK, no results
val qryResult = from(DBName.tablename)(t => where(t.position lte 83172924) select (t)) //compile ERROR

object DBName extends Schema 
  val tablename = table[FOO]("tablename")


class FOO(var position: Int) 
  def this() = this (0)

根据http://max-l.github.com/Squeryl/functions.html 应该可以吗?!

感谢任何帮助。

【问题讨论】:

qryResult.statement 很有帮助:... From tablename tablename1 Where (tablename1.position = true)。不要 【参考方案1】:

这应该给你一个弃用警告:

qryResult = from(DBName.tablename)(t => where(t.position <= 83172924) select (t))

有一个已弃用的隐式转换导致问题,请参阅此

https://groups.google.com/forum/#!searchin/squeryl/implicit$20boolean/squeryl/pSUzNDA4Bq4/oHmqS16yD_0J

我刚刚从 master 分支中删除了它。

这个应该可以:

qryResult = from(DBName.tablename)(t => where(t.position lte 83172924) select (t))

我刚刚试了一下,它可以正确编译和运行。

【讨论】:

确实,lte 版本有效。但是我仍在努力在 squeryl 中定义查询。在 sql 中很简单:SELECT * FROM tablename WHERE x = "a" and ((startPos between 83172924 and 83336614 or endPos between 83172924 and 83336614) or (startPos &lt; 83172924 and endPos &gt; 83336614))。但在 squeryl 中它的工作方式不同:val qryResult = from(DBName.tablename)(t =&gt; where(t.x === "a" and ((t.startPos between(83172924, 83336614) or t.endPos between(83172924, 83336614)) or (t.startPos lt 83172924 and t.endPos gt 83336614)) select (t))) 你在上面的代码中有一个不平衡的括号! select(t) 在 where() 子句中... 谢谢,但这并不能解决问题:(。我得到了error: type mismatch found: Int required: org.squeryl.dsl.ast.LogicalBooleanerror: value x is not a memeber of Nothing 到处都有例子吗?我找不到任何使用谷歌和 squeryl 网站的琐碎示例!括号应该清楚地定义逻辑。至少它适用于 SQL...为什么不适用于 squeryl?

以上是关于包含greaterThanEqual(gte)或lessThanEqual(lte)的Squeryl查询给出错误/无结果的主要内容,如果未能解决你的问题,请参考以下文章

我的PYTHON 之路 运算符/数据类型/

如何过滤大于或等于空?

Java : JPA相关以及常用注解

Django 查询性能

$gte 和 $lte 在 Mongoose/MongoDB 中没有按预期工作

MongoDB 查询 lte 比 gte 快