SELECT 查询预期返回等效结果,而不是产生非常不同的结果。
1) 启动 orientdb 控制台并连接到 GratefulDeadConcerts 数据库。 (来自开发的 v2.2.1-SNAPSHOT)。
在接下来的两个查询中(我认为它们是等价的),我试图列出所有演唱过“Bob_Dylan”创作的歌曲的歌手。
2) 查询 1:
orientdb {db=GratefulDeadConcerts}> SELECT OUT("sung_by").name 作为歌手 FROM V WHERE OUT("written_by").name="Bob_Dylan"
+----+------------+
|# |歌手 |
+----+------------+
|0 |[堰] |
|1 |[堰] |
|2 |[Bob_Dylan] |
|3 |[Bob_Dylan] |
|4 |[Bob_Dylan] |
|5 |[Bob_Dylan] |
|6 |[Bob_Dylan] |
|7 |[Bob_Dylan] |
|8 |[加西亚] |
|9 |[加西亚] |
|10 |[Bob_Dylan] |
|11 |[Bob_Dylan] |
|12 |[Bob_Dylan] |
|13 |[加西亚] |
|14 |[Lesh] |
|15 |[Bob_Dylan] |
|16 |[加西亚] |
|17 |[全部] |
|18 |[Weir_Garcia]|
|19 |[堰] |
+----+------------+
LIMIT EXCEEDED:结果集包含更多未显示的项目(限制=20)
3) 查询 2:
orientdb {db=GratefulDeadConcerts}> 从 V WHERE IN("sung_by").OUT("written_by").name="Bob_Dylan" 中选择歌手的名字
+----+-----------+
|# |歌手 |
+----+-----------+
|0 |Weir_Garcia|
|1 |Neil_Young |
+----+-----------+
找到 2 个项目。 查询在 0.068 秒内执行。
[X] 远程
[ ] 我有多个服务器的分布式设置。 多少?
[ ] 我使用的是企业版
[ ] v2.0.x - 请指定最后一个数字:
[ X] v2.2.x - 请指定最后一个数字:
OrientDB 控制台 v.2.2.1-SNAPSHOT (build develop@r3f4b9c490e67ffe2c0c2030930517509c647a334; 2016-06-07 14:02:16+1000) www.orientdb.com
[ ] Linux
[ ] 其他名字?
[ ] 6
嗨@codelimner
您不应该对可以返回多个值的表达式使用=
运算符(如果返回多个值,= 将不匹配),您应该使用 CONTAINS 代替。
请尝试以下操作并告诉我:
SELECT OUT("sung_by").name as singer FROM V WHERE OUT("written_by").name CONTAINS "Bob_Dylan"
SELECT name as singer FROM V WHERE IN("sung_by").OUT("written_by").name CONTAINS "Bob_Dylan"
谢谢
路易吉
@codelimner
顺便说一句,从 2.2 开始,您可以像这样使用模式匹配
MATCH
{ class: V, as: bob, where: (name ="Bob_Dylan") }
<-written_by- {as : song} -sung_by-> {as : artist}
RETURN bob.name,song.name,artist.name
有关文档,请参阅此处
http://orientdb.com/docs/2.2/SQL-Match.html
@luigidellaquila是的,我必须使用 CONTAINS,并且通过这种更改,查询会按预期产生结果。
@maggiolo00 MATCH 语句非常有用。 只是对 http://orientdb.com/docs/2.2/SQL-Match.html 上的文档的一个小评论 [用例 - > 深度遍历] 部分下的第二个 MATCH 查询似乎不完整。
谢谢!
嗨@codelimner
谢谢指点,好像是GitBook的问题,原wiki页面运行正常... https://github.com/orientechnologies/orientdb-docs/blob/master/SQL-Match.md#deep -遍历
我现在正在尝试修复它
谢谢
路易吉