为什么我尝试在 CASE 语句中设置 属性 时收到语法错误?

Why do I receive a syntax error when trying to set a property in a CASE statement?

您好,我正在使用 Node4j,我正在尝试根据关系的类型更改关系的属性,我拥有的代码是:

Start f=rel(1) MATCH ()-[f]->()
SET f.distancia=256
return CASE f
WHEN rel(f)='FERROCARRIL'
THEN SET f.tiempo=f.distancia/150*60, f.precio=f.distancia*0.23
WHEN rel(f)='AVION'
THEN SET f.tiempo=f.distancia/250*60, f.precio=f.distancia*0.6
WHEN rel(f)='BUS'
THEN SET f.tiempo=f.distancia/110*60, f.precio=f.distancia*0.25
ELSE
SET f.tiempo=f.distancia/100*60, f.precio=f.distancia*0.28
END

我也尝试输入 case rel(f) 而不是 f 但我得到了相同的结果。

它 returns 一个无效的语法错误,我该怎么做?

PS:我需要通过关系的id获取f

它不起作用,因为您不能在 CASE 语句中设置值。要使其工作,您必须在 FOREACH 语句中设置值。因此,在您的 CASE 语句中,您可以为不匹配的类型设置一个空数组,并为匹配的类型设置一个单项数组。

MATCH ()-[f]->()
WHERE id(f) = 1
SET f.distancia=256
WITH f 
, CASE type(f)
    WHEN 'FERROCARRIL'
      THEN [[1],[],[],[]]
    WHEN 'AVION'
      THEN [[],[1],[],[]]
    WHEN 'BUS'
      THEN [[],[],[1],[]]
    ELSE
      [[],[],[],[1]]
END as type_rel
FOREACH( x in type_rel[0] | SET f.tiempo=f.distancia/150*60, f.precio=f.distancia*0.23 )
FOREACH( x in type_rel[1] | SET f.tiempo=f.distancia/250*60, f.precio=f.distancia*0.6 )
FOREACH( x in type_rel[2] | SET f.tiempo=f.distancia/110*60, f.precio=f.distancia*0.25 )
FOREACH( x in type_rel[3] | SET f.tiempo=f.distancia/100*60, f.precio=f.distancia*0.28 )
RETURN type_rel, f

另一种更清洁的方法是这样的...

MATCH ()-[f]->()
WHERE id(f) = 1
SET f.distancia=256
WITH f 
, CASE type(f)
    WHEN 'FERROCARRIL'
      THEN [150, 0.23]
    WHEN 'AVION'
      THEN [250, 0.6]
    WHEN 'BUS'
      THEN [110, 0.25]
    ELSE
       [100, 0.28]
END as factors
SET f.tiempo=f.distancia/ factors[0] * 60, f.precio= f.distancia * factors[1]
RETURN f