Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
765 views
in Technique[技术] by (71.8m points)

neo4j - ORDER BY the result of UNION of subqueries

I would like to compute the UNION of multiple subqueries and sort the result using ORDER BY.

So I'd like to run this query (written in pseudo-Cypher):

(RETURN 2 AS x
UNION
RETURN 1 AS x)
ORDER BY x

And get the following result:

╒═══╕
│x  │
╞═══╡
│1  │
├───┤
│2  │
└───┘

Is there a way to do this? As ORDER BY is always tied to a single WITH/RETURN clause, I do not think this is possible, nor can I think of a good workaround.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The Cypher language does not yet support Post-Union processing.

However, as a workaround, you should be able to use the APOC procedure apoc.cypher.run to perform the UNION operation in a "subroutine", and then perform the post-UNION processing in the main Cypher query. For example:

CALL apoc.cypher.run("RETURN 2 AS x UNION RETURN 1 AS x", NULL) YIELD value
RETURN value.x AS x
ORDER BY x;

Update: this is now possible in Neo4j 4.0 using the CALL {subquery} construct.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...