2013-03-21 21 views
5

Có cách nào để thực hiện một truy vấn như thế này trong Slick:"Chọn Trong" sử dụng Slick

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

Cảm ơn

+0

Đây là câu hỏi tương tự: http://stackoverflow.com/questions/14920153/how-to-write-nested-queries-in-select-clause –

Trả lời

1

yes:

nhập khẩu:

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

import Q.interpolation

kết quả, và chuyển đổi sang kết quả:

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

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

truy vấn của bạn:

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)

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

này tạo

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

đó là tương đương về mặt hàng trả lại. Nếu bạn cần truy vấn chính xác đó vì lý do nào đó, bạn có thể cần phải mở rộng slick hoặc sử dụng truy vấn tĩnh.

Các vấn đề liên quan