【问题标题】:SQL outer join vs Neo4J CipherSQL 外连接与 Neo4J 密码
【发布时间】:2017-02-23 02:51:25
【问题描述】:

我是 Neo4J Cipher 的新手,我知道我想在 SQL 中获得什么,但无法在 Cipher 中创建查询。

让我们有 3 个表:

Pers(persId,name,workId,born)
Work(workId,name)
Friend(pers1Id,pers2Id)

问题: 找人,在同一家公司工作,不是朋友,年龄差小于5。 在 SQL 中,一个简单的查询如下所示:

select * from Pers p1 join Pers p2 on p1.workId=p2.workId 
where not exists
(select 1 from Friend f where p1.persId in (f.person1Id,f.person2Id) 
and p2.persId in (f.person1Id,f.person2Id) ) 
and abs(p1.born-p2.born)<5

Neo4J 密码呢? 任何帮助将不胜感激,尤其是如何将 SQL 转换为密码查询。 米雷克

【问题讨论】:

  • 它有助于包含您迄今为止尝试过的内容,即使它不起作用

标签: sql encryption neo4j cypher translate


【解决方案1】:

假设您有 :Person 和 :Workplace 标签。让我们假设这些关系已经存在:

(:Person)-[:WorksAt]->(:Workplace)
(:Person)-[:FriendsWith]->(:Person)

您的 Cypher 查询类似于:

MATCH (p1:Person)-[:WorksAt]->()<-[:WorksAt]-(p2:Person)
WHERE NOT (p1)-[:FriendsWith]-(p2)
AND abs(p1.born-p2.born) < 5
RETURN p1, p2

但请记住,我认为您将获得每对两排,并切换顺序(如果您需要,我们可以轻松消除它)。

一般来说,绘制模式或查询的图表是个好主意,从那里将其转换为 Cypher 通常并不难。

【讨论】:

    【解决方案2】:

    正如 InverseFalcon 的回答所示,您可以使用 WHERE NOT &lt;pattern&gt; 构造来表达反连接(有时称为左反半连接)操作。

    我刚刚完成了一篇关于该主题的学术论文 - 该论文目前正在同行评审中,但它可以帮助您了解关系代数和 Cypher 之间的联系:http://docs.inf.mit.bme.hu/ingraph/pub/btw2017-opencypher.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2018-12-08
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多