首页 > 解决方案 > Scala,元组的sql插值

问题描述

我有一个在普通 sql 中看起来像这样的查询

Select * from persons 
where (persons.first_name, persons.last_name) 
in (('a', 'b'), ('c', 'd'))

我正在尝试从 scala 中执行此操作

val names = List(("James", "hasi"), ("Michael", "Myers))
sql""" Select * from ${table}     where (first_name, last_name) IN ${names}""".stripMargin.map(...)

但是它失败了,因为 scalikejdbc 不知道如何插入元组。

"PSQLException: Can't infer the SQL type to use for an instance scala.Tuple2"

知道如何实现吗?我想我总是可以将元组列表转换为字符串,但问题是 scala 会用单引号将它包装起来,将所有内容都作为字符串处理。

标签: sqlpostgresqlscalatuplesscalikejdbc

解决方案


我会将其发布为答案,因为它解决了问题,但方式不同。我最终在 scalikejdbc 中编写了原始 SQL,而没有转义元组“名称”

您可以通过使用 SQLSyntax 类来做到这一点

val a = SQLSyntax.createUnsafely(names)
sql"${a}" <- not escaped

推荐阅读