我想将SQL查询转换为JSONiq查询,是否已经有了这个实现,如果不是,我需要知道什么才能创建可以执行此操作的程序?
答案 0 :(得分:1)
我不了解实施情况,但技术上可行且简单明了。 JSONiq有90%的DNA来自XQuery,它本身也是由参与SQL的人设计的。
从数据模型的角度来看,表被映射到一个集合,表的每一行都映射到一个平面JSON对象,即所有字段都是原子值,如下所示:
{
"Name" : "Turing",
"First" : "Alan",
"Job" : "Inventor"
}
然后,通过将SELECT-FROM-WHERE查询转换为FLWOR表达式来完成映射,这些表达式提供了SQL功能的超集。
例如:
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
被称为from
而return
被称为select
,如果这些关键字是大写的,那么JSONiq的语法会非常相似对于SQL:它只是化妆品。