使用union 合并两个match 查询时,order by 结果不准确

线上版本3.4.1

背景:我有两个查询,想将这两个查询合并为一个结果集,然后对该结果集的某个字段进行排序,这两个查询返回的对象是一致的。
语句如下:

match (v:userInfo)-[e:关注]->(n)-[r:发布|点赞|评论]->(p:dynamic)   
where p.dynamic.rankTime < 1781652239000 
and v.userInfo.userId == 10104583
and p.dynamic.isBlack == 0 
and p.dynamic.userId != 10104583  and p.dynamic.visibleType == 1   
return  p,p.dynamic.rankTime as r 
union
match (p:dynamic)   where p.dynamic.dynamicId == 92432 
return  p,p.dynamic.rankTime as r  
order by r desc

但是结果结果显示,union 后的match查询直接拼在了union前的match查询后,没有进行整体排序:

("dynamic92434" :dynamic{dynamicId: 92434, isBlack: 0, rankTime: 1697439827000, userId: 113, visibleType: 1})	1697439827000
("dynamic92435" :dynamic{dynamicId: 92435, isBlack: 0, rankTime: 1697439966000, userId: 113, visibleType: 1})	1697439966000
("dynamic92437" :dynamic{dynamicId: 92437, isBlack: 0, rankTime: 1697440114000, userId: 113, visibleType: 1})	1697440114000
("dynamic92438" :dynamic{dynamicId: 92438, isBlack: 0, rankTime: 1697440299000, userId: 113, visibleType: 1})	1697440299000
("dynamic92439" :dynamic{dynamicId: 92439, isBlack: 0, rankTime: 1697440513000, userId: 113, visibleType: 1})	1697440513000
("dynamic92441" :dynamic{dynamicId: 92441, isBlack: 0, rankTime: 1697440674000, userId: 113, visibleType: 1})	1697440674000
("dynamic92442" :dynamic{dynamicId: 92442, isBlack: 0, rankTime: 1697440831000, userId: 113, visibleType: 1})	1697440831000
("dynamic92432" :dynamic{dynamicId: 92432, isBlack: 0, rankTime: 1697439677000, userId: 103, visibleType: 1})	1697439677000

如上所示,id 为dynamic92432的这条数据的rankTime 跟前面的数据没有作为整个的结果集排序。

想问下各位大佬是为什么?

看了会论坛有人建议第一个match出来的结果 不用return 用with ,但是会报错

另外,我原本的语句其实是:
match (v:userInfo)-[e:关注]->(n)-[r:发布|点赞|评论]->(p:dynamic)
where p.dynamic.rankTime < 1781652239000
and v.userInfo.userId == 10104583
and p.dynamic.isBlack == 0
and p.dynamic.userId != 10104583 and p.dynamic.visibleType == 1 or p.dynamic.dynamicId == 92432
return distinct p,p.dynamic.rankTime as r order by r desc

但是这样有个or 连接 会很慢

所以分成了两个match 进行union

order by 这个命令不是一个对整个结果进行排序的命令,而是对它所在的语句进行排序。如果你放在第二个 match 后面的话,它是对第二个 match 的结果进行排序再同第一个 match 的结果进行 union。

1 个赞

那请问如果我想对union 后的整个结果集进行order by 操作和分页操作 应该怎么实现?

已解决

o.o。咋解决的,方便告知下么?

微信问了你们其他的同事,反馈说是目前match 加union 的方式目前是不支持的,用go语句是支持的

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。