Выберите In, используя Slick

Есть ли способ выполнить такой запрос в Slick:

"select * from foo where id IN (select other_id from bar where status = 'damaged')"

Спасибо


person Pablo Fernandez    schedule 21.03.2013    source источник
comment
Это аналогичный вопрос: stackoverflow.com/questions/14920153/   -  person Alex Yarmula    schedule 22.03.2013


Ответы (2)


for{
    f <- foo,
    b <- bar if (b.status === 'damaged' && f.id === b.other_id)
} yield f

это производит

select x2."id" from "foo" x2, "bar" x3 
    where (x2."id" = x3."other_id") and (x3."status" = 'damaged')

что эквивалентно возвращаемым строкам. Если вам по какой-то причине нужен именно этот запрос, вам, вероятно, потребуется либо расширить slick, либо использовать статический запрос.

person Martin Kolinek    schedule 22.03.2013

да:

импорт:

import scala.slick.jdbc.{ GetResult, StaticQuery => Q }

import Q.interpolation

результат и преобразование в результат:

case class FooResult(id: Int, name: String)

implicit val getPersonResult = GetResult(r => FooResult(r.<<, r.<<))

Ваш запрос:

val status = "damaged"

val q = Q.query[String,FooResult]("select * from foo where id IN (select other_id from bar where status = ?)")

val result = q.list(status)

person barczajozsef    schedule 22.03.2013