我想将 SQL 查询转换为 JSONiq 查询,是否已经有实现,如果没有,我需要知道什么才能创建可以执行此操作的程序?
user2202810
问问题
284 次
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)
}
实际上,如果for
had been calledfrom
和return
had been called select
,如果这些关键字都是大写的,那么 JSONiq 的语法将与 SQL 的语法非常相似:它只是一个化妆品。
于 2016-12-23T11:19:25.497 回答