我正在学习 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)
由于can't assign a value toQuery for unknown vars: [?amount]
的第二部分,消息引发异常。or-join
?amount