Ví dụ, tôi có các định nghĩa bảng sau:Tôi làm cách nào để thực hiện các truy vấn tổng hợp trong Slick?
object Houses extends Table[Long]("Houses") {
def id = column[Long]("id")
def * = id
}
object Rooms extends Table[(Long, Long)]("Rooms") {
def id = column[Long]("id")
def houseId = column[Long]("houseId")
def size = column[Int]("size")
def * = id ~ houseId ~ size
}
Và tôi muốn chọn phòng lớn nhất đối với mỗi ngôi nhà.
tôi đã đưa ra cách lừa sau:
val query = {
(r1, r2) <- Rooms leftJoin Rooms on ((r1,r2) =>
r1.houseId === r2.houseId && r1.size > r2.size
)
if r2.id.isNull
} yield r1
Nó không những gì tôi cần, nhưng là xấu xí, hoàn toàn không thể đọc được, và dường như làm tổn thương thực hiện. Tôi đã cố gắng sử dụng groupBy
trên truy vấn, nhưng có vẻ như tôi hiểu nhầm một số khái niệm cốt lõi - Tôi không thể có được loại quyền.
Có cách nào tốt hơn để thực hiện truy vấn tổng hợp như vậy trong Slick không?
Cảm ơn! Phiên bản có 'tồn tại' thực sự nhanh hơn nhiều và đi qua các hàng ít hơn 30x. – Rogach