概述
LET
语句可通过定义新变量向工作表添加列。使用=
运算符为变量赋值。
<let statement> ::=
"LET" <variable definition> [ { "," <variable definition> }... ]
<variable definition> ::=
<binding variable> "=" <value expression>
详情
LET
不改变工作表的记录数。LET
不修改工作表中现有的列,除非在LET
语句内重新定义已有变量。- 无法在同一条
LET
语句中定义新变量并引用它。
示例图

CREATE GRAPH myGraph {
NODE Paper ({title string, score uint32, author string}),
EDGE Cites ()-[{}]->()
} PARTITION BY HASH(Crc32) SHARDS [1]
INSERT (p1:Paper {_id:"P1", title:'Efficient Graph Search', score:6, author:'Alex'}),
(p2:Paper {_id:"P2", title:'Optimizing Queries', score:9, author:'Alex'}),
(p3:Paper {_id:"P3", title:'Path Patterns', score:6, author:'Zack'}),
(p1)-[:Cites]->(p2),
(p2)-[:Cites]->(p3)
使用常量定义变量
LET s = 6, a = "Alex"
MATCH (p:Paper) WHERE p.score = s AND p.author = a
RETURN p.title, s, a
结果:
p.title | s | a |
---|---|---|
Efficient Graph Search | 6 | Alex |
在LET中引用变量
如果在LET
语句中引用了变量,则LET
语句等价于以下的CALL
语句:
"CALL" "(" <referenced variables> ")" "{"
<let statement>
"RETURN" <all variables>
"}"
详情
<referenced variables>
是逗号分隔的在LET
语句中引用的所有变量。<all variables>
是逗号分隔的LET
语句中包含的所有变量。
以下查询在LET
语句中引用x
,并判断其score
属性值是否大于7:
MATCH (x:Paper)
LET recommended = x.score > 7
RETURN x.title, recommended
此查询相当于:
MATCH (x:Paper)
CALL (x) {
LET recommended = x.score > 7
RETURN x, recommended
}
RETURN x.title, recommended
结果:
x.title | recommended |
---|---|
Optimizing Queries | 1 |
Efficient Graph Search | 0 |
Path Patterns | 0 |
以下查询在LET
语句中引用p
来计算每条路径的长度:
MATCH p = ()->{1,2}()
LET length = path_length(p)
RETURN p, length
结果:
p | length |
---|---|
![]() |
1 |
![]() |
1 |
![]() |
2 |