我正在操作文档集合和边缘集合,我想执行联接操作以从文档集合中获取详细信息。
这是我正在尝试做的:
第一:select from l2 where p = "568700933"
另一个集合中的 join 属性具有值p = 568700933;
第二select Entry from P where reference = p+";"
第三个返回条目和 p .
我不知道如何加入这个
当我尝试select from a , b
时出现错误
我需要的是:
Select from edge node of key p = "568700933" , get the assosiated details from the document collection of the same key , knowing that the document collection had p = "568700933;"
OrientDB中没有JOIN,你就是做不到。查询仅接受单个目标。
在图形数据库中,将关系定义为边,而不是 pk/fk 和连接。 获得边缘后,您可以将 SELECT 与out()/in()
函数一起使用或 MATCH 遍历它们 (http://orientdb.com/docs/2.2.x/SQL-Match.html(
[编辑] 这里有一个关于如何使用 OrientDB 执行此操作的实际示例。
假设您有两个顶点类ClassP
和ClassQ
以及称为ClassE
的边类
首先,让我们创建架构:
CREATE CLASS ClassP EXTENDS V;
CREATE CLASS ClassQ EXTENDS V;
CREATE CLASS ClassE EXTENDS E;
现在让我们用一些数据填充它:
CREATE VERTEX ClassP SET name = 'foo';
CREATE VERTEX ClassP SET name = 'bar';
CREATE VERTEX ClassP SET id = 1;
CREATE VERTEX ClassP SET id = 2;
并通过边缘连接它们:
/* from "foo" to "1" */
CREATE EDGE ClassE
FROM
(SELECT FROM ClassP WHERE name = 'foo')
TO
(SELECT FROM ClassQ WHERE id = 1)
SET myEdgeProp = 'x';
/* from "foo" to "2" */
CREATE EDGE ClassE
FROM
(SELECT FROM ClassP WHERE name = 'foo')
TO
(SELECT FROM ClassQ WHERE id = 2)
SET myEdgeProp = 'y';
/* from "bar" to "2" */
CREATE EDGE ClassE
FROM
(SELECT FROM ClassP WHERE name = 'bar')
TO
(SELECT FROM ClassQ WHERE id = 2)
SET myEdgeProp = 'z';
现在我们可以按如下方式查询数据集:
/* get the name of a vertex and all the connected IDs */
SELECT name, out("ClassE").id FROM ClassP WHERE name = 'foo';
或
MATCH
{class:ClassP, as:a, where:(name = 'foo')} -ClassE-> {as:b}
RETURN a.name as name, b.id as id
或
/* return all the details for all the vertices */
MATCH
{class:ClassP, as:a, where:(name = 'foo')} -ClassE-> {as:b}
RETURN $elements
我希望它有所帮助