OPTIONAL MATCH¶
Caution
The feature is still in beta. It will continue to be optimized.
The OPTIONAL MATCH
clause is used to search for the pattern described in it. OPTIONAL MATCH
matches patterns against your graph database, just like MATCH
does. The difference is that if no matches are found, OPTIONAL MATCH
will use a null for missing parts of the pattern.
OpenCypher Compatibility¶
This topic applies to the openCypher syntax in nGQL only.
Limitations¶
The WHERE
clause cannot be used in an OPTIONAL MATCH
clause.
Example¶
The example of the use of OPTIONAL MATCH
in the MATCH
statement is as follows:
nebula> MATCH (m)-[]->(n) WHERE id(m)=="player100" \
OPTIONAL MATCH (n)-[]->(l) \
RETURN id(m),id(n),id(l);
+-------------+-------------+-------------+
| id(m) | id(n) | id(l) |
+-------------+-------------+-------------+
| "player100" | "team204" | __NULL__ |
| "player100" | "player101" | "team204" |
| "player100" | "player101" | "team215" |
| "player100" | "player101" | "player100" |
| "player100" | "player101" | "player102" |
| "player100" | "player101" | "player125" |
| "player100" | "player125" | "team204" |
| "player100" | "player125" | "player100" |
+-------------+-------------+-------------+
Using multiple MATCH
instead of OPTIONAL MATCH
returns rows that match the pattern exactly. The example is as follows:
nebula> MATCH (m)-[]->(n) WHERE id(m)=="player100" \
MATCH (n)-[]->(l) \
RETURN id(m),id(n),id(l);
+-------------+-------------+-------------+
| id(m) | id(n) | id(l) |
+-------------+-------------+-------------+
| "player100" | "player101" | "team204" |
| "player100" | "player101" | "team215" |
| "player100" | "player101" | "player100" |
| "player100" | "player101" | "player102" |
| "player100" | "player101" | "player125" |
| "player100" | "player125" | "team204" |
| "player100" | "player125" | "player100" |
+-------------+-------------+-------------+
Last update:
February 3, 2023