概述
子图模板子句subgraph([<path_template1>, <path_template2>, ...])
使用多个路径模板来描述子图并进行查询。这些路径模板通过相交的点或边拼接在一起,相交关系是通过定义和调用点、边别名来体现的。
![](https://img.ultipa.cn/draw/draw_b0d2c31b24cb4f728686a4543f0723af.jpg?v='1703123921086')
语法
- 子句别名:不支持
- 子图模板也不支持为其中的任何一个路径模板定义别名
示例
一个关联别名
本例构建的子图查找接收过顾客CU013和CU016转账的顾客,返回他们的全部信息:
![](https://img.ultipa.cn/draw/draw_f0ae74576e1e489ca72960f3b94de79e.jpg?v='1703123940506')
subgraph([
n({_id == "CU013"}).re().n({@card}).re({@transfer}).n({@card} as n).le().n({@customer} as c),
n({_id == "CU016"}).re().n({@card}).re({@transfer}).n(n)
])
return c{*}
上例通过别名n将两条路径关联起来。
多个关联别名
本例构建的子图查找由3名不同顾客的银行卡形成的单一方向转账环路,返回这些的顾客全部信息:
![](https://img.ultipa.cn/draw/draw_1f533ce37d1546eb935ed48604f7dd51.jpg?v='1703124000637')
subgraph([
n({@customer} as A1).re().n({@card} as C1),
n({@customer && _uuid < A1._uuid} as A2).re().n({@card} as C2),
n({@customer && _uuid < A2._uuid} as A3).re().n({@card} as C3),
n(C1).re().n(C2).re().n(C3).re().n(C1)
])
return A1{*}, A2{*}, A3{*}
上例通过别名C1、C2和C3将四条路径关联起来。
本例构建的子图查找使用了相同邮箱、手机号和设备两张银行卡,将两张银行卡的ID组装成表格后返回:
![](https://img.ultipa.cn/draw/draw_f1a6108295a846d89c17db39cb7d08d9.jpg?v='1703124023781')
subgraph([
n({@card} as C1).e().n({@email}).e().n({@card && _uuid > C1._uuid} as C2),
n(C1 as C11).e().n({@phone}).e().n(C2 as C22),
n(C11).e().n({@device}).e().n(C22)
])
return table(C11._id, C22._id)
上例通过别名C1和C2将三条路径关联起来。要注意的是,多次调用一个别名时,需在每次调用后对该别名重新进行定义,如上例的第二个路径模板将C1重新定义为C11,C2重新定义为C22。