2

null になる可能性のあるフィールドに対してカスカログで外部結合を行うときに、デフォルト値を指定する最良の方法は何だろうと思っていました。

 (def example-query
    (<- [?id ?fname ?lname !days-active]
        (users :> ?id ?fname ?lname)
        (active :> ?fname ?lname !days-active))

この例では、users と active は以前に定義されたクエリであり、アクティブなユーザー情報 (?fname ?lname !days-active) と通常のユーザー情報 (?id ?fname ?lname) を関連付けようとしています。

そのため、!days-active に対応する情報がない場合に結合が発生すると、nil ではなく 0 が出力されます。

392393 john smith 3
003030 jane doe 0

それ以外の

392393 john smith 3
003030 jane doe null

更新された例

(<- [!!database-id ?feature !!user-clicks !!engaged-users ?application-id ?active-users]
                     (app-id-db-id-feature-clicks-engaged :> ?application-id !!database-id ?feature !!user-clicks !!engaged-users )
                     (user-info :> ?application-id ?feature ?active-users))]

出力例はおおよそ次のようになります

4234 search null null 222 5000
3232 profile 500 400 331 6000

私が興味を持っているフィルタリングを使用すると、!!engaged-users および !!user-clicks になるフィールドを null ではなく 0 に変更できます。複数のOr述語を使用すると機能しますか?

4

1 に答える 1

1

あなたがしたいことは、or述語を追加することだと思います:

(def example-query
   (<- [?id ?fname ?lname !days-active]
       (users :> ?id ?fname ?lname)
       (active :> ?fname ?lname !days-active)
       (or !days-active 0 :> ?active-days)))

ところで、それは外部結合ではありません!days-active。位置の null 変数を除外していないだけです。

于 2013-09-23T18:50:04.430 に答える