包含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 < 83172924 and endPos > 83336614))
。但在 squeryl 中它的工作方式不同:val qryResult = from(DBName.tablename)(t => 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.LogicalBoolean
和error: value x is not a memeber of Nothing
。
到处都有例子吗?我找不到任何使用谷歌和 squeryl 网站的琐碎示例!括号应该清楚地定义逻辑。至少它适用于 SQL...为什么不适用于 squeryl?以上是关于包含greaterThanEqual(gte)或lessThanEqual(lte)的Squeryl查询给出错误/无结果的主要内容,如果未能解决你的问题,请参考以下文章