【发布时间】:2015-05-12 02:14:05
【问题描述】:
我有这个查询返回非常快,0.5 秒并返回所有预期的 303 条记录。注意:“Woka”在这里的意思是“书”。
MATCH (p:Publisher)-[r:PUBLISHED]->(w:Woka)<-[s:AUTHORED]-(a:Author),
(l:Language)-[t:USED]->(w:Woka)-[u:INCLUDED]->(b:Bisac)
WHERE (a.author_name = 'Camus, Albert')
RETURN w.woka_id as woka_id, p.publisher_name as publisher_name, w.woka_title as woka_title, a.author_name as author_name, l.language_name as language_name, b.bisac_code as bisac_code, b.bisac_value as bisac_value
ORDER BY woka_id;
我想添加更多信息,例如描述。我创建了描述节点,并且在语言和描述以及描述和书籍(Woka)之间创建了关系。 下面的查询将所有描述返回为空,但仅针对 60 条记录而不是 303 条。这是因为并非所有书籍都有描述。执行时间还可以,0.3秒。
MATCH (p:Publisher)-[r:PUBLISHED]->(w:Woka)<-[s:AUTHORED]-(a:Author),
(l:Language)-[t:USED]->(w:Woka), (b:Bisac)<-[u:INCLUDED]-(w:Woka),
(d:Description)-[v:HAS_DESCRIPTION]-(w)
WHERE (a.author_name = 'Camus, Albert')
RETURN w.woka_id as woka_id, p.publisher_name as publisher_name, w.woka_title as woka_title, a.author_name as author_name, l.language_name as language_name, b.bisac_code as bisac_code, b.bisac_value as bisac_value, d.description as description
ORDER BY woka_id;
但是我知道结果集中遗漏了一些记录,50 和 303 的区别确实有描述。我使用 OPTIONAL 构建了另一个查询,但是这个(如下所示)永远不会返回,永远运行。
MATCH (p:Publisher)-[r:PUBLISHED]->(w:Woka)<-[s:AUTHORED]-(a:Author),
(l:Language)-[t:USED]->(w:Woka)-[u:INCLUDED]->(b:Bisac)
OPTIONAL MATCH (d:Description)-[v:HAS_DESCRIPTION]-(w:Woka)-[:AUTHORED]-(a:Author)
WHERE (a.author_name = 'Camus, Albert')
RETURN w.woka_id as woka_id, p.publisher_name as publisher_name, w.woka_title as woka_title, a.author_name as author_name, l.language_name as language_name, b.bisac_code as bisac_code, b.bisac_value as bisac_value, d.description as description
ORDER BY woka_id;
对于 303 条记录的原始结果集,不知道如何改进查询以获取存在的可选描述和不存在的空值?
【问题讨论】:
-
你用的是什么版本?