2016-12-11 57 views
1

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

+0

你对JSONIQ了解多少? – McNets

+0

截至目前,我什么都不知道,我只知道它是XQuery的JSON文件 – user203788

回答

1

我不知道有一个实现,但是,它在技术上是可行和简单的。 JSONiq拥有90%的DNA来自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被称为fromreturn被称为select,如果这些关键字写大写字母,JSONiq的语法将非常类似于SQL的:它是唯一的化妆品。

+0

感谢您的详细解答,我现在不能因为我的声誉而高举您的答案,但我会尽我所能, – user203788