【发布时间】:2021-06-13 20:52:39
【问题描述】:
我正在学习 Datalog/DataScript/Datomic。为此,我在 DataScript 上设置了一个简单的分类帐数据库来使用。到目前为止,它基本上由一组帐户和一个具有属性:entry.record/account 和:entry.record/amount 的记录列表组成。现在,我试图通过将每个帐户的所有 :entry.record/amount 相加来获得所有帐户的余额。此查询为我提供了所有在分类帐上有记录的帐户的余额:
(d/q '[:find ?account ?account-name (sum ?amount)
:with ?record
:in $
:where [?account :account/name ?account-name]
[?record :entry.record/account ?account]
[?record :entry.record/amount ?amount]]
@conn)
但我有一些帐户仍然没有注册任何记录,并且它们没有出现在这里。我想进行一个包含它们的查询,并以 0 值列出。我一直在使用or-join 和missing? 将这些帐户包含在查询中,但我不知道如何将帐户的金额设为0。例如,这个查询:
(d/q '[:find ?account ?account-name (sum ?amount)
:with ?record
:in $
:where [?account :account/name ?account-name]
(or-join [?record]
(and [?record :entry.record/account ?account]
[?record :entry.record/amount ?amount])
[(missing? $ ?record :entry.record/account)])]
@conn)
由于or-join 的第二部分无法为?amount 赋值,因此会引发消息Query for unknown vars: [?amount] 的异常。
【问题讨论】:
标签: clojure datomic datalog datascript