我有2个子查询,可返回2组用户(每个查询返回1组用户)
第一个查询:
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})-->(first_set_of_users)
RETURN first_set_of_users
第二个查询:
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})<-[:LIKES]-(likers)-[:LIKES]->(v)
WITH DISTINCT v
MATCH (second_set_of_users)-[:LIKES]->(v)
RETURN second_set_of_users, COUNT(*) AS recoWeight
ORDER BY recoWeight DESC
我最后要返回的是second_set_of_users
中的所有用户减去first_set_of_users
和ORDER BY recoWeight DESC
中的用户
如何在一个查询中做到这一点?我尝试过的所有事情都导致了笛卡尔式的查询结果,并且花费了很多时间,而每个独立的查询都花费了不到一秒钟的时间。
答案 0 :(得分:1)
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})-->(first_set_of_users)
WITH collect(first_set_of_users) AS list_of_first_set_of_users
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})<-[:LIKES]-(likers)-[:LIKES]->(v)
WITH DISTINCT v, list_of_first_set_of_users
MATCH (second_set_of_users)-[:LIKES]->(v)
WITH second_set_of_users, COUNT(*) AS recoWeight
WHERE NOT second_set_of_users IN list_of_first_set_of_users
RETURN second_set_of_users, recoWeight
ORDER BY recoWeight DESC
说明。
使用WITH
子句,我们可以将第一个查询的结果传递给第二个查询。
然后使用WHERE NOT IN
我们可以过滤第二个查询的结果。