You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squeryl中OR、AND语法及指定SQL查询的正确写法

嗨,我来帮你搞定Squeryl里的AND/OR逻辑写法,还有你指定的那个SQL查询的实现!

Squeryl中AND/OR逻辑的基础语法

Squeryl的条件表达式和SQL逻辑对应得很直观,核心规则如下:

  • AND逻辑:有两种写法,要么直接用逗号分隔多个条件,要么用and方法显式连接,效果完全一致。比如:
    // 逗号分隔的AND
    from(myTable)(t => where(t.colA === "val1", t.colB === "val2") select(t))
    
    // 用and方法连接的AND
    from(myTable)(t => where(t.colA === "val1" and t.colB === "val2") select(t))
    
  • OR逻辑:必须用or方法来连接条件。当OR和AND混合使用时,记得用括号把OR条件包裹起来,Squeryl会自动帮你生成SQL里对应的括号,保证逻辑优先级正确。
实现你要的SQL查询

首先假设你已经定义了和数据库表对应的Squeryl映射类和Schema:

import org.squeryl._
import org.squeryl.PrimitiveTypeMode._

// 对应数据库的table表
case class MyTable(colA: String, colB: String)

// 定义Schema
object MyAppSchema extends Schema {
  val myTable = table[MyTable]("table")
}

接下来是对应你给出的SQL的Squeryl代码:

val targetData = from(MyAppSchema.myTable)(t =>
  where(
    // 括号包裹OR条件,保证先执行OR再执行AND
    (t.colA === "value1" or t.colA === "value2") and t.colB === "value3"
  )
  select(t)
)

另外,针对colA = 'value1' or colA = 'value2'这种“字段等于多个值”的场景,Squeryl还提供了更简洁的in方法,代码可以简化成:

val targetData = from(MyAppSchema.myTable)(t =>
  where(
    t.colA in Seq("value1", "value2") and t.colB === "value3"
  )
  select(t)
)

这两种写法生成的SQL和你要求的完全一致,逻辑优先级也能得到保证。

内容的提问来源于stack exchange,提问作者AI Joes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:31