scala - In one-to-many, how to express "where exists" in slick? -


let's assume 2 tables:

  • cats, cat
  • personality traits, personality_trait

were cat has id , personality_trait has id , string trait.

e.g.

== cat == id  |  name --------------- 0   |  tom 1   |  garfield 2   |  kitty  == personality_trait === id  |  trait --------------- 0   |  stubborn 1   |  stubborn 1   |  sleepy 1   |  moody 2   |  sleepy 2   |  moody 

how cats have @ least traits i'm interested in?

e.g. how garfield when i'm looking stubborn , moody

i thinking of like

personality_trait.groupby(_.id).filter {   case (id, traits) => <predicate on traits> }.map(_._1) 

i found solution, albeit inelegant , potentially inefficient:

val desiredtraits = set("stubborn", "moody")  (for {   catid <- personality_trait.filter(_.trait insetbind desiredtraits)              .groupby(_.id).map { case (txnid, foundtraits) =>                (txnid, foundtraits.length)              }.filter { case (txnid, foundtraitcount) =>                foundtraitcount >= desiredtraits.size              }.map(_._1)   cat <- cat if cat.id === catid } yield (cat)).result 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -