【问题标题】:Find outer join of 2 neo4j CQL queries查找 2 个 neo4j CQL 查询的外连接
【发布时间】:2020-02-06 12:17:37
【问题描述】:

我有 2 个 CQL 查询:-

MATCH (OX:OrderX) 
MATCH (OXT:OrderXType) 
WHERE OX.OrderXTypeID=OXT.OrderXTypeID
AND OXT.SourceTypeID="1"  
RETURN OX.OrderXID,OX.IdentifierID;

MATCH (OX:OrderX)
MATCH (OXT:OrderXType)
WHERE OX.OrderXTypeID=OXT.OrderXTypeID
AND OXT.SourceTypeID="2"
RETURN OX.OrderXID,OX.IdentifierID;

输出为:-

╒═════════════╤═════════════════╕
│"OX.OrderXID"│"OX.IdentifierID"│
╞═════════════╪═════════════════╡
│"-2147483640"│"-2147483644"    │
├─────────────┼─────────────────┤
│"-2147483639"│"-2147483643"    │
└─────────────┴─────────────────┘

╒═════════════╤═════════════════╕
│"OX.OrderXID"│"OX.IdentifierID"│
╞═════════════╪═════════════════╡
│"-2147483643"│"-2147483643"    │
├─────────────┼─────────────────┤
│"-2147483641"│"-2147483641"    │
├─────────────┼─────────────────┤
│"-2147483642"│"-2147483642"    │
└─────────────┴─────────────────┘

我希望将结果作为 OX.IdentifierID(s) 上的外连接。

首选结果是:-

"-2147483641","-2147483642","-2147483644"

【问题讨论】:

    标签: neo4j cypher graph-databases neo4j-apoc


    【解决方案1】:

    [更新]

    您可以使用 APOC 函数apoc.coll.disjunction 来获取 2 个输入列表的析取。

    例如:

    OPTIONAL MATCH (x1:OrderX), (t1:OrderXType)
    WHERE t1.SourceTypeID = "1" AND x1.OrderXTypeID = t1.OrderXTypeID
    WITH COLLECT(DISTINCT x1.IdentifierID) AS x1s
    OPTIONAL MATCH (x2:OrderX), (t2:OrderXType)
    WHERE t2.SourceTypeID = "2" AND x2.OrderXTypeID = t2.OrderXTypeID
    RETURN apoc.coll.disjunction(x1s, COLLECT(DISTINCT x2.IdentifierID))
    

    注意:此示例使用DISTINCT 来最小化传递给 APOC 函数的 2 个列表的大小。但这确实是可选的,因为apoc.coll.disjunction 无论如何都会返回一个具有不同值的列表。

    【讨论】:

    • 上面的查询似乎对我做了一个简单的连接,输出为:- "IdentifierID": "-2147483641", "IdentifierID": "-2147483642", "IdentifierID": "-2147483643 ”和“标识符ID”:“-2147483644”。但我只想将两个数据集的外连接为 - ("-2147483641","-2147483642","-2147483644")
    • 你能帮我调整一下这个 Cypher 吗?我是 Cypher 的新手。
    • 我试过这个:- OPTIONAL MATCH (x1:OrderX), (t1:OrderXType) WHERE t1.SourceTypeID = "1" AND x1.OrderXTypeID = t1.OrderXTypeID WITH COLLECT(DISTINCT x1) AS x1s可选匹配 (x2:OrderX), (t2:OrderXType) WHERE t2.SourceTypeID = "2" AND x2.OrderXTypeID = t2.OrderXTypeID WITH COLLECT(DISTINCT x2) AS x2s RETURN apoc.coll.disjunction(x1s.CoreIdentifierID, x2s. CoreIdentifierID)
    • 但我不知道为什么它给了我变量x1s未定义错误。
    • 当我尝试这种方式时,它给了我空的数据集:- OPTIONAL MATCH (x1:OrderX), (t1:OrderXType) WHERE t1.SourceTypeID = "1" AND x1.OrderXTypeID = t1 .OrderXTypeID WITH COLLECT(DISTINCT x1.CoreIdentifierID) 作为 x1s 可选匹配 (x2:OrderX), (t2:OrderXType) WHERE t2.SourceTypeID = "2" AND x2.OrderXTypeID = t2.OrderXTypeID RETURN apoc.coll.disjunction(x1s,收集(DISTINCT x2.CoreIdentifierID))
    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2017-09-20
    • 1970-01-01
    • 2020-12-15
    • 2020-11-25
    相关资源
    最近更新 更多