mysql - 如何在 CYPHER 中编写此 SQL 查询?
问题描述
这是以下 SQL 查询
select count(distinct Descendent_id) from
(
select *
from v.ABC a
left join v.XYZ b
on a.Target_id=b.Ancestor_id
) t
where t.Target_id = 1234;
编辑
两个表/节点之间实际上没有关系。我来解释——
假设表 B 有Ancestor_Id和Descendent_id,它们之间有某种关系,我们可以称之为 [children]
Ancestor_Id - 101 --[children]--> Descendent_Id - 101.1
Ancestor_Id - 101 --[children]--> Descendent_Id - 101.2
表 A 只有与表 B 相同的Target_Id ,例如 - 表 A - Target_Id = 101 | 表 - B Ancestor_Id = 101
笔记 -
表 A 与表 B 没有任何关系。
所以我需要用Target_Id 和 Ancestor_ID加入两个表/节点,最终我想要的是表 B 中的Descendent_Id的 DISTINCT COUNT,它与 Ancestor_Id 有 [children] 关系。
如果您可以从 SQL 查询中看到 Descendent_id 没有像 b.Descendent 那样预先附加任何别名,我如何在 Neo4j 中实现相同的效果。
请让我知道如果我仍然没有正确地清除疑问。
我是 CYPHER 的新手 - Neo4j,请帮助!
解决方案
[更新]
以下 Cypher 将获取具有指定 ID 的节点的“左连接”中不同值的D_id
数量。abc
xyz
MATCH (a:abc) WHERE a.id = $id
OPTIONAL MATCH (b:xyz) WHERE b.abc_id = $id
WITH COLLECT(a.D_id)+COLLECT(b.D_id) AS ids
UNWIND ids AS id
RETURN COUNT(DISTINCT id) AS D_id_count
我假设abc
节点将 ID 存储在id
属性中,xyz
节点将其存储在abc_id
属性中。我还假设所需的 ID 值作为id
参数传递。
注意:如果您在以下位置创建索引,此查询会更快:
:abc(id)
:xyz(abc_id)
推荐阅读
- ssh - SFTP、SSH 和 SSH 隧道
- reactjs - 跟踪 react useEffect 依赖数组
- javascript - 我想显示发布内容的id,目前是用变量表示的,所以我想用数组索引来显示
- sql - 为什么 FIRST_VALUE 和 LAST_VALUE 不是 SQL 中的聚合函数?
- r - 如何使用虹膜数据绘制这个?
- python-3.x - 获取 TypeError:如果未指定方向,则 key_or_list 必须是列表的实例
- javascript - array.map() 无法按预期渲染
- React 中的组件
- python - 无法在第一个 elif 块之外打印
- python - 为什么“if[i %2==0]”总是正确的?
- shell - 想在ansible playbook中使用lineinfile在文件中插入文本