sql - OrientDB SQL 查询模拟多对多连接

标签 sql orientdb

鉴于使用 OrientDB 文档 API 创建的以下架构:

    OClass team = getoDocDatabase().getMetadata().getSchema().createClass(TEAM);
    team.createProperty(NAME, OType.STRING);

    OClass driver = getoDocDatabase().getMetadata().getSchema().createClass(DRIVER);
    driver.createProperty(NAME, OType.STRING);

    OClass car = getoDocDatabase().getMetadata().getSchema().createClass(CAR);
    car.createProperty(NAME, OType.STRING);

    // Relationships
    team.createProperty(CARS_HERITAGE, OType.LINKSET, car);
    car.createProperty(BUILT_BY, OType.LINK, team);
    car.createProperty(DRIVEN_BY, OType.LINKSET, driver);
    driver.createProperty(DRIVER_OF, OType.LINKSET, car);

获取费尔南多·阿隆索效力过的所有车队的 SQL 查询是什么?

在关系 SQL 中就像这样简单

SELECT team.name FROM {the join} where driver.name = 'Fernando Alonso'

最佳答案

我尝试过这个数据库

create class Team
CREATE PROPERTY Team.name String

create class DRIVER
CREATE PROPERTY DRIVER.name String

create class Car
CREATE PROPERTY Car.name String

CREATE PROPERTY Team.CARS_HERITAGE LINKSET Car
CREATE PROPERTY Car.BUILT_BY LINK Team
CREATE PROPERTY Car.DRIVEN_BY LINKSET DRIVER
CREATE PROPERTY DRIVER.DRIVER_OF LINKSET Car

插入

INSERT INTO TEAM(name) values ("Ferrari"),("Renault") // Ferrari 12:0  Renault 12:1
insert into Driver(name) values ("Fernando Alonso"),("Giancarlo Fisichella") // Alonso 13:0  Fisichella 13:1
insert into car(name,BUILT_BY,DRIVEN_BY) values ("car ferrari",#12:0,[#13:0,#13:1])
insert into car(name,BUILT_BY,DRIVEN_BY) values ("car renault",#12:1,[#13:0])

查询

select BUILT_BY.name as TeamName from car where DRIVEN_BY.name contains "Fernando Alonso"

enter image description here

希望有帮助。

更新1

select distinct(BUILT_BY.name) as team from car where DRIVEN_BY.name contains "Fernando Alonso"

来自 JAVA API

enter image description here

更新2

enter image description here

来自 JAVA API

enter image description here

关于sql - OrientDB SQL 查询模拟多对多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458979/

相关文章:

mysql - 列出 MySQL 中可用的数据类型

sql - 是否可以在 Azure Web 角色中运行 SQL Express?

node.js - npm 安装 orientjs fatal error 。 node_version.h 在哪里?

orientdb - 无法使用 Orientdb v-3.0.0 在 "gremlin"中执行查询

java - 在 OrientDB 中查找最短路径长度

java - OrientDB 选择一个对象的名称,后跟 2 个以上用户

sql - 如何根据某些条件从不同区域开始在 SQL Server 中生成两个唯一 ID?

sql - 错误 49 错误的绑定(bind)变量 oracle 表单

database - 如何在orientdb中从一个类获取数据到另一个类

nosql - Orientdb 版本之间有什么区别?