Slick1.0.0 -RC1を使用しています。テーブルオブジェクトの定義は次のとおりです。
object ProductTable extends Table[(Int, String, String, String, Double, java.sql.Date, Int, Option[Int], Int, Boolean)]("products") {
def id = column[Int]("productId", O.PrimaryKey, O.AutoInc)
def title = column[String]("title")
def description = column[String]("description")
def shortDescription = column[String]("shortDescription")
def price = column[Double]("price")
def addedDate = column[java.sql.Date]("addedDate")
def brandId = column[Int]("brandId")
def defaultImageId = column[Option[Int]]("defaultImageId")
def visitCounter = column[Int]("visitCounter")
def archived = column[Boolean]("archived")
def * = id ~ title ~ description ~ shortDescription ~ price ~ addedDate ~ brandId ~ defaultImageId ~ visitCounter ~ archived
}
データベースから8行を選択する簡単なクエリが必要です。
ProductTable.filter(_.title === "something")
.sortBy(_.visitCounter)
.map(_.title)
.take(8)
.selectStatement
そして、出力は次のとおりです。
select x2.x3 from
(select x4.`title` as x3 from `products` x4
where x4.`title` = 'something'
order by x4.`visitCounter` limit 8) x2
メソッドを削除した場合take()
:
ProductTable.filter(_.title === "something")
.sortBy(_.visitCounter)
.map(_.title)
.selectStatement
その場合、出力は次のようになります。
select x2.`title` from `products` x2
where x2.`title` = 'something'
order by x2.`visitCounter`
take()
だから私の質問は:クエリオブジェクトがメソッドで構築されているときにSlickがサブクエリを生成するのはなぜですか?
PSそれが関連している可能性がある場合、私はこれらすべてでMySqlドライバーを使用します