给定使用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'
答案 0 :(得分:2)
我试过这个db
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
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"
希望它有所帮助。
更新1
select distinct(BUILT_BY.name) as team from car where DRIVEN_BY.name contains "Fernando Alonso"
FROM JAVA API
更新2
FROM JAVA API
答案 1 :(得分:0)
@Alessandro的回答是正确的,但我发现sql被解释的方式有些奇怪。让我解释一下自己。
我已经简化了目标,让我们尝试查找查询以获取至少拥有汽车的团队。
第一个查询有效,是Alessandro建议的查询。它返回一个包含一个属性的文档列表,即该团队的名称。
select distinct(team.name) as name from Car
第二个查询也可以,返回团队列表(作为文档)。
select expand(distinct(team)) from Car
这第三个查询的工作原理和返回结果完全相同,因此忽略了" .name"选择的一部分。
select expand(distinct(team)).name from Car
最后一次查询失败。嗯它没有失败,但它没有返回我的预期,它返回了一个链接列表给团队。
select distinct(team).name from Car
测试运行查询:Tests。