当前位置:   article > 正文

AGE 在CTE表达式中使用Cypher

AGE 在CTE表达式中使用Cypher

在使用CTE(公共表达式)时,没有对使用Cypher的限制。

查询:

  1. WITH graph_query as (
  2. SELECT *
  3. FROM cypher('graph_name', $$
  4. MATCH (n)
  5. RETURN n.name, n.age
  6. $$) as (name agtype, age agtype)
  7. )
  8. SELECT * FROM graph_query;

结果:

  1. name age
  2. ‘Andres’ 36
  3. ‘Tobias’ 25
  4. ‘Peter’ 35
  5. 3 row(s) returned

在Join表达式中使用Cypher

Cypher查询可以是JOIN子句的一部分。

开发者注意事项 使用CREATE、SET、REMOVE子句的Cypher查询不能在带有JOIN的SQL查询中使用,因为它们会影响Postgres事务系统。一个可能的解决方案是使用CTE来保护查询。有关更多详细信息,请参阅“使用CTE与CREATE、REMOVE和SET”子节。

查询:

  1. SELECT id,
  2. graph_query.name = t.name as names_match,
  3. graph_query.age = t.age as ages_match
  4. FROM schema_name.sql_person AS t
  5. JOIN cypher('graph_name', $$
  6. MATCH (n:Person)
  7. RETURN n.name, n.age, id(n)
  8. $$) as graph_query(name agtype, age agtype, id agtype)
  9. ON t.person_id = graph_query.id

结果:

  1. id names_match ages_match
  2. 1 True True
  3. 2 False True
  4. 3 True False
  5. 3 row(s) returned

SQL表达式中的Cypher

Cypher不能在表达式中使用—查询必须存在于查询的FROM子句中。但是,如果将Cypher查询放置在子查询中,它将像任何SQL样式查询一样工作。

使用Cypher和‘=’

当编写已知返回一列和一行的cypher查询时,可以使用‘=’比较运算符。

查询:

  1. SELECT t.name FROM schema_name.sql_person AS t
  2. where t.name = (
  3. SELECT a
  4. FROM cypher('graph_name', $$
  5. MATCH (v)
  6. RETURN v.name
  7. $$) as (name varchar(50))
  8. ORDER BY name
  9. LIMIT 1);

结果:

  1. name age
  2. ‘Andres’ 36
  3. 3 row(s) returned

使用Postgres的IN子句

当编写已知返回一列但可能有多行的cypher查询时,可以使用IN运算符。

查询:

  1. SELECT t.name, t.age FROM schema_name.sql_person as t
  2. where t.name in (
  3. SELECT *
  4. FROM cypher('graph_name', $$
  5. MATCH (v:Person)
  6. RETURN v.name
  7. $$) as (a agtype));

结果:

  1. name age
  2. ‘Andres’ 36
  3. ‘Tobias’ 25
  4. ‘Peter’ 35
  5. 3 row(s) returned

使用Postgres的EXISTS子句

当编写可能返回多个列和行的cypher查询时,可以使用EXISTS运算符。

查询:

  1. SELECT t.name, t.age
  2. FROM schema_name.sql_person as t
  3. WHERE EXISTS (
  4. SELECT *
  5. FROM cypher('graph_name', $$
  6. MATCH (v:Person)
  7. RETURN v.name, v.age
  8. $$) as (name agtype, age agtype)
  9. WHERE name = t.name AND age = t.age
  10. );

结果:

  1. name age
  2. ‘Andres’ 36
  3. ‘Tobias’ 25
  4. 3 row(s) returned

查询多个图

SQL语句可以查询多个图,没有限制。用户可以同时查询多个图。

查询:

  1. SELECT graph_1.name, graph_1.age, graph_2.license_number
  2. FROM cypher('graph_1', $$
  3. MATCH (v:Person)
  4. RETURN v.name, v.age
  5. $$) as graph_1(col_1 agtype, col_2 agtype, col_3 agtype)
  6. JOIN cypher('graph_2', $$
  7. MATCH (v:Doctor)
  8. RETURN v.name, v.license_number
  9. $$) as graph_2(name agtype, license_number agtype)
  10. ON graph_1.name = graph_2.name

结果:

  1. name age license_number
  2. ‘Andres’ 36 1234567890
  3. 3 row(s) returned

  使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

  1. CREATE EXTENSION age;
  2. LOAD 'age';
  3. SET search_path = ag_catalog, "$user", public;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/859178
推荐阅读
相关标签
  

闽ICP备14008679号