2016-07-09 12 views
3

Slickで列がヌルでない場合はフェッチするクエリを作成し、nullの場合は別の列の値が既定値になります。 db.runへの呼び出しを繰り返さずに、どうすればいいですか?あなたのテーブル定義を想定しSlick 3.xでフォールバックを使用してオプションの列値を照会する方法

+1

どのように表示されますか?ヌル可能な 'first_col'といくつかのヌル可能な' second_col'を持っていて、 'first_col'のクエリ中にすべてのヌル値が' second_col'からのものに置き換えられなければならないのでしょうか? –

+0

はい、それはまさに私が意味することです、ありがとう。 –

+0

どのバージョンのSlickをお使いですか?それはSlick 2.xかSlick 3.xですか? –

答えて

4

はこのようなものになります:first_col内のすべてのNULL値がsecond_colからの値に置き換えられます

val query = TableQuery[EmployeesTable].map(employee => employee.firstCol.ifNull(employee.secondCol)) 
val result: Future[Seq[Int]] = db.run(query.result) 

この方法は:

import slick.driver.PostgresDriver.api._ // Import your driver here 

class EmployeesTable(tag: Tag) extends Table[(Option[Int], Int)](tag, "employees") { 
    def firstCol = column[Option[Int]]("first_col") // This column is nullable 
    def secondCol = column[Int]("second_col") // This column is non-nullable 

    def * = (firstCol, secondCol) 
} 

を次に、あなたのクエリは次のようになります。 。これは、次のSQLクエリと同等です:

select coalesce("first_col", "second_col") from "employees" 
+0

これは実際に私の問題を解決しませんでしたが、元の質問に雄弁に答えていますので、助けてくれてありがとうございました。 –

関連する問題