2012-07-01 2 views
1

최근에 Squeryl ORM을 평가하기 시작했는데 좋았지 만 결국 Squeryl로 "빌드"하는 데 문제가있는 SQL 쿼리가 나타났습니다.Squeryl ORM의 WHERE 하위 쿼리에서 gt, gte 등을 사용합니다.

모든 제품의 평균 수량보다 많은 수량을 갖고 싶습니다. 이미 Squeryl가 where -clause 하위 쿼리 in(), exists()notExists()을 지원하는 것을 발견

SELECT * FROM product p WHERE p.quantity > (SELECT AVG(quantity) FROM product) 

처럼 는 SQL에서,이 보일 것이다. Squeryl 또한 avg 집계를 지원하기 때문에, 나는 이런 식으로 뭔가 할 수 있다는 것을 희망 :

val avgQuantity = from(products)(p => compute(avg(p.quantity))) 
val oftenOccuringProducts = from(products)(p => where(p.quantity gt avgQuantity) select(p)) 

안타깝게도이 제기 : 물론

type mismatch; found : org.squeryl.Query[org.squeryl.dsl.Measures[Option[org.squeryl.PrimitiveTypeMode.FloatType]]] 
required: org.squeryl.dsl.NumericalExpression[?] 

, 그 2에서 할 수 있어요 쿼리 (먼저 평균 수량을 얻은 다음 두 번째 쿼리에서 사용) 서브 시스템을 포함하여 하나의 쿼리로 을 수행 할 수 있는지 궁금합니다.

Squeryl을 사용하여이 작업을 수행 할 수 없나요?

가능하다면, 도움이 되었으면 좋겠습니다.

감사합니다,

세바스찬 Squeryl 마스터 지점에

답변

1
같은 토론 당

메일 링리스트, a fix was pushed과는 다음 릴리스에 포함됩니다.

+0

sebastian_oe에서 제공 한 검색어가 어떻게 표시되는지 간단한 스 니펫을 게시 해주세요. –

+2

안녕하세요, 방금 프로젝트의 master 브랜치에서 수정을 시도했는데 예상대로 작동하고 있습니다 : val avgQuantity : org.squeryl.Query [org.squeryl.dsl.Measures [Option [Double]]] from (products) (p => where (p.quantity gt avgQuantity) select (p))'에서 사용할 수 있습니다. (p => compute (avg (p.quantity)))' 예상대로 1 SQL 문으로 쿼리를 만듭니다. (명확하게하기 위해 첫 번째 문에 형식을 명시 적으로 추가했습니다.) –

관련 문제