2017-11-15 7 views
0

내가 슬릭와 스칼라 코드에 SQL에서 쿼리를 변환하려고했습니다 슬릭 인스턴스화 할 수없는,하지만 난 필터 절에서 컴파일러 오류를 가지고있다 : 생성자는 예상 유형 인스턴스화 할 수 없습니다. 슬릭의생성자는 스칼라

내 코드 :

val subquery = (for { 
     pit <- PassInTripTable.table 
     t <- TripTable.table if pit.tripNoFk === t.tripNo 
    } yield (pit, t)) 
     .map{ case (pit, t) => (pit, Case.If(t.townFrom <= t.townTo).Then(t.townFrom ++ t.townTo).Else(t.townFrom ++ t.townTo))} 
      .groupBy(_._1.idPsgFk) 
      .filter{ case ((pit, count), group) => (group.map(_._2).countDistinct === 1)} 
       .map(_._1) 
    val query = PassengerTable.table.filter(_.idPsg in subquery).map(_.name) 
    db.run(query.result) 

SQL 자체의 조회 : 사람이 오류를 찾기 위해 나에게 도움이 있다면 매우 감사하게 될 것입니다

select name from passenger 
     where id_psg in 
     (
      select id_psg from trip t,pass_in_trip pit 
      where t.trip_no=pit.trip_no 
      group by id_psg 
      having count(distinct case when town_from<=town_to then town_from+town_to else town_to+town_from end)=1 
     ) 

.

답변

1

코드를 보면 "((pit, count), group)"이 아닌 일치하는 유형이있는 것 같습니다.

Slick의 groupBy는 Tuple2s 컬렉션 만 반환합니다.

http://slick.lightbend.com/doc/3.0.0/queries.html

따라서, 필터는 ... 같은 조언을

.filter{ case (pit, count) => (count.map(_._2).countDistinct === 1)} 
+1

감사를 보일 수 있습니다. 그러나 그러한 필터를 사용하면 다음과 같은 예외가 발생합니다. _SlickTreeException : 노드를 SQL Comprehension_으로 변환 할 수 없습니다. – Cassie

+1

오 구문 론적으로 정확한 대답을 제공하지 않았습니다. 나는 방금 Tuple2 [A, B], C]를 찾고 웹 사이트에서 Tuple2 [A, B]를 찾고있다. –