Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ORDER BY the result of UNION of subqueries

Tags:

neo4j

cypher

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.

like image 282
Gabor Szarnyas Avatar asked Oct 18 '25 07:10

Gabor Szarnyas


1 Answers

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:

CALL {
  RETURN 2 AS x
  UNION ALL
  RETURN 1 AS x"
}
RETURN x
ORDER BY x;
like image 199
cybersam Avatar answered Oct 21 '25 18:10

cybersam