SQL的数据组查询转换器

时间:2016-11-09 13:53:25

标签: datomic

我想在datomic

中表示以下SQL查询

SELECT A.a C.c. 从A,B,C 在哪里A.id = B.id和B.index = C.index

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

此外,如果WHERE条件被反转,那么相同的数据组查询是否有效,即我们有" B.index = C.index和A.id = B.id"?

1 个答案:

答案 0 :(得分:0)

以下是字面翻译:

(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)

我写过,所以你应该能够看到如何从问题转化为答案。

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

条款无论如何都可以重新排序,并且在逻辑上保持等价。不同之处在于性能:将最窄/特定的条款放在首位以获得更好的性能。

一些警告:

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

SQL和Datalog之间存在许多差异,例如Datalog中没有表(意思是变量名?A,?B,?C是任意的),但这一点都有详细记录。