Neo4J Cypher - Как выполнить операции предложения IN над списком списков - PullRequest
1 голос
/ 10 января 2020

В Neo4J для простой проверки предложения IN можно просто сделать, например:

itemList = [i1, i2, i3]

  • item IN itemsList

но как выполнить операцию IN над списком списков, например,

  • itemList1 = [i1, i2, i3], itemList2 = [i4, i5, i2], itemList3 = [ i1, i7, i8]
  • itemLists = [itemList1, itemList2, itemList3]
  • item IN itemLists

Мне нужно использовать эту операцию совместно с CASE WHEN Например,

СЛУЧАЙ, КОГДА i1 В ItemLists THEN true

Ответы [ 3 ]

2 голосов
/ 11 января 2020

Для этого можно использовать предикаты списков any() и all(), в зависимости от того, что вам нужно.

Итак, чтобы проверить, есть ли значение в любом из присутствующих списков, вы можете использовать:

any(list in itemLists WHERE i1 IN list)
1 голос
/ 10 января 2020

Ваше решение case / when / in работает, но вы также можете попытаться сгладить массив и затем использовать in.

Пример: x in reduce(s = [], list IN itemLists | s + list)

0 голосов
/ 10 января 2020

Вы можете просто добавить списки вместе, если хотите.

WITH 'i1' AS tester 
, ['i1','i2','i3'] AS list1
, ['i4','i5','i6'] AS list2
, ['i7','i8','i9'] AS list3
RETURN CASE 
  WHEN tester IN (list1 + list2 + list3) THEN true
  ELSE false
END AS in_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...