Ich verwende Slick 1, und ich muss in der Lage sein, einen Filter in einer Abfrage anzuwenden, um alle Entitäten zu suchen, die einer Bedingung in einer verwandten Tabelle entsprechen.SELECT DISTINCT in Scala slick
Dieses Beispiel mit der Slick-Dokumentation zeigt, was ich versuche (dies ist ein künstliches Beispiel, das meiner Situation sehr nahe kommt).
Hier möchte ich alle Kaffees, die von Lieferanten an der Westküste zur Verfügung gestellt werden. Ich möchte nur der Kaffee, ich bin nur daran interessiert zu Lieferanten in der Navigation durch das Filter anzuwenden:
val westCoast = Seq("CA", "OR", "WA")
val implicitInnerJoin = for {
c <- Coffees
s <- Suppliers if c.supID === s.id && s.state inSet westCoast
} yield c
Dies funktioniert ok, aber es wird Coffees dupliziert, wenn es mehr als eine Übereinstimmung in der Tabelle Lieferanten ist.
Die offensichtliche Problemumgehung ist in normalen SQL, eine SELECT-DISTINCT auszuführen; Aber ich kann hier keinen Weg finden, das zu tun.
Sie könnten theoretisch tun ein:
query.list.distinct
Nachdem die Ergebnisse bereits zurückgegeben werden; Allerdings habe ich auch die PAGING-Unterstützung implementiert, so dass Sie die Ergebnisse nicht mehr verarbeiten möchten, sobald sie bereits aus der Datenbank zurückkommen. Hier ist die Paging-Unterstützung:
query.drop(offset).take(limit).list
So, kurz gesagt, ich brauchen eine Möglichkeit, SELECT angeben DISTINCT in meiner Anfrage, die hinausgeht.
Wer hat irgendwelche Ideen?
Hey, dieser hat funktioniert! Ich bin mir nicht ganz sicher, warum, ich habe nicht tiefer getaucht, aber ich brauchte eine schnelle Lösung. – noplay
Aus irgendeinem Grund gibt mir das eine "scala.TupleN" statt "XxxRow" Einheit, mit "ClassCastException" geworfen. –
Sieht aus wie dies die Ursache ist: https://github.com/slick/slick/pull/735 –