1

我想将 SQL 查询转换为 JSONiq 查询,是否已经有实现,如果没有,我需要知道什么才能创建可以执行此操作的程序?

4

1 回答 1

1

我不知道有什么实现,但是,它在技术上是可行且简单的。JSONiq 有 90% 的 DNA 来自 XQuery,而 XQuery 本身也是由 SQL 相关人员设计的。

从数据模型的角度来看,一个表映射到一个集合,表的每一行都映射到一个平面 JSON 对象,即所有字段都是原子值,如下所示:

{
  "Name" : "Turing",
  "First" : "Alan",
  "Job" : "Inventor"
}

然后,通过将 SELECT-FROM-WHERE 查询转换为提供 SQL 功能超集的 FLWOR 表达式来完成映射。

例如:

SELECT Name, First
FROM people
WHERE Job = "Inventor"

可以映射到:

for $person in collection("people")
where $person.job eq "Inventor"
return project($person, ("Name", "First"))

更复杂的查询也可以非常直接地映射:

SELECT Name, COUNT(*)
FROM people
WHERE Job = "Inventor"
GROUP BY Name
HAVING COUNT(*) >= 2

至:

for $person in collection("people")
where $person.job eq "Inventor"
group by $name := $person.name
where count($person) ge 2
return {
  name: $name,
  count: count($person)
}

实际上,如果forhad been calledfromreturnhad been called select,如果这些关键字都是大写的,那么 JSONiq 的语法将与 SQL 的语法非常相似:它只是一个化妆品。

于 2016-12-23T11:19:25.497 回答