0

目前这是存储在数据库中的数据

Org Name   Org ID
A            1
B            2
C            5
D            9  

我正在尝试结合这两个查询:

MATCH (n:Org)
WHERE n.id in [1,2]
RETURN n.name as group1_name, n.id as group1_id

MATCH (n:Org)
WHERE n.id in [5,9]
RETURN n.name as group2_name, n.id as group2_id

我需要这样显示结果:

group1_id   group1_name   group2_id   group1_name
1                A           5          C
2                B           9          D
4

1 回答 1

1

假设两个 id 列表的大小始终相同(在您的示例中为 2),这是一种方法(假设您还希望 id 值按升序排序):

MATCH (n:Org)
WHERE n.id in [1, 2]
WITH n ORDER BY n.id
WITH COLLECT(n) AS ns
MATCH (m:Org)
WHERE m.id in [5, 9]
WITH ns, m ORDER BY m.id
WITH ns, COLLECT(m) AS ms
UNWIND [i IN RANGE(0, SIZE(ns)-1) | {a: ns[i], b: ms[i]}] AS row
RETURN
  row.a.id as group1_id, row.a.name as group1_name,
  row.b.id as group2_id, row.b.name as group2_name

这是一个更简单的方法:

WITH [1, 2] AS xs, [5, 9] AS ys
UNWIND RANGE(0, SIZE(xs)-1) AS i
MATCH (n:Org), (m:Org)
WHERE n.id = xs[i] AND m.id = ys[i]
RETURN n.id as group1_id, n.name as group1_name, m.id as group2_id, m.name as group2_name

最后,如果xsand列表作为参数ys传递给查询:

UNWIND RANGE(0, SIZE($xs)-1) AS i
MATCH (n:Org), (m:Org)
WHERE n.id = $xs[i].id AND m.id = $ys[i].y
RETURN n.id as group1_id, n.name as group1_name, m.id as group2_id, m.name as group2_name
于 2020-06-23T20:40:49.103 回答