【问题标题】:datomic query converter from SQL来自 SQL 的数据查询转换器
【发布时间】:2016-11-09 13:53:24
【问题描述】:

我想用 datomic 表示下面的 SQL 查询

选择 A.a C.c 从 A、B、C WHERE A.id = B.id 和 B.index = C.index

这将是什么数据查询表示?

此外,如果 WHERE 条件相反,即我们有“B.index = C.index and A.id = B.id”,相同的 datomic 查询是否有效?

【问题讨论】:

    标签: datomic


    【解决方案1】:

    这里是直译:

    (d/q '[:find ?a-val ?c-val
           :where
           [?A :a.id ?id]
           [?B :b.id ?id]
           [?B :b.index ?index]
           [?C :c.index ?index]
           [?A :a ?a-val]
           [?C :c ?c-val]]
      db)
    

    我已经写了,所以你应该能够看到如何从问题翻译成答案。

    希望很明显,在两个地方使用 ?index 与 SQL where 子句中的 = 执行相同的工作。

    这些子句无论如何都可以重新排序,并且在逻辑上保持等效。不同之处在于性能:将最狭窄/具体的子句放在首位以获得更好的性能。

    一些注意事项:

    您是否希望indexid 概念具有不同的属性(例如a.indexb.index 或仅index)取决于您的要求。 Datomic 有很好的docs 和教程。

    SQL 和 Datalog 之间有许多不同之处,例如 Datalog 中没有表(意味着变量名称 ?A、?B、?C 是任意的),但这些都有很好的文档记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2015-11-20
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      相关资源
      最近更新 更多