首页 > 数据库 >nebula nGQL中的WITH语句使用——和sql里with as的顺序是相反的

nebula nGQL中的WITH语句使用——和sql里with as的顺序是相反的

时间:2023-08-08 17:35:41浏览次数:45  
标签:语句 RETURN name nGQL nebula player sql age

SQL中的with as语句

WITH AS短语,也叫做子查询部分(subquery factoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。

比如

with A as (select * from class)

select *from A  

这个语句的意思就是,先执行select * from class 得到一个结果,将这个结果记录为A ,在执行select *from A 语句。A 表只是一个别名。

也就是将重复用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。

 

nGQL WITH语句

WITH子句可以获取并处理查询前半部分的结果,并将处理结果作为输入传递给查询的后半部分。

openCypher 兼容性

本文操作仅适用于 openCypher 方式。

Note

在原生 nGQL 中,有与WITH类似的管道符,但它们的工作方式不同。不要在 openCypher 方式中使用管道符,也不要在原生 nGQL 中使用WITH子句。

组成复合查询

使用WITH子句可以组合语句,将一条语句的输出转换为另一条语句的输入。

示例 1

  1. 匹配一个路径。
  2. 通过nodes()函数将路径上的所有点输出到一个列表。
  3. 将列表拆分为行。
  4. 去重后返回点的信息。
nebula> MATCH p=(v:player{name:"Tim Duncan"})--() \
        WITH nodes(p) AS n \
        UNWIND n AS n1 \
        RETURN DISTINCT n1;
+-----------------------------------------------------------+
| n1                                                        |
+-----------------------------------------------------------+
| ("player100" :player{age: 42, name: "Tim Duncan"})        |
| ("player101" :player{age: 36, name: "Tony Parker"})       |
| ("team204" :team{name: "Spurs"})                          |
| ("player102" :player{age: 33, name: "LaMarcus Aldridge"}) |
| ("player125" :player{age: 41, name: "Manu Ginobili"})     |
| ("player104" :player{age: 32, name: "Marco Belinelli"})   |
| ("player144" :player{age: 47, name: "Shaquille O'Neal"})  |
| ("player105" :player{age: 31, name: "Danny Green"})       |
| ("player113" :player{age: 29, name: "Dejounte Murray"})   |
| ("player107" :player{age: 32, name: "Aron Baynes"})       |
| ("player109" :player{age: 34, name: "Tiago Splitter"})    |
| ("player108" :player{age: 36, name: "Boris Diaw"})        |
+-----------------------------------------------------------+

示例 2

  1. 匹配点 ID 为player100的点。
  2. 通过labels()函数将点的所有 Tag 输出到一个列表。
  3. 将列表拆分为行。
  4. 返回结果。
nebula> MATCH (v) \
        WHERE id(v)=="player100" \
        WITH labels(v) AS tags_unf \
        UNWIND tags_unf AS tags_f \
        RETURN tags_f;
+----------+
| tags_f   |
+----------+
| "player" |
+----------+

过滤聚合查询

WITH可以在聚合查询中作为过滤器使用。

nebula> MATCH (v:player)-->(v2:player) \
        WITH DISTINCT v2 AS v2, v2.player.age AS Age \
        ORDER BY Age \
        WHERE Age<25 \
        RETURN v2.player.name AS Name, Age;
+----------------------+-----+
| Name                 | Age |
+----------------------+-----+
| "Luka Doncic"        | 20  |
| "Ben Simmons"        | 22  |
| "Kristaps Porzingis" | 23  |
+----------------------+-----+

collect() 之前处理输出

collect()函数将输出结果转换为列表之前,可以使用WITH子句排序和限制输出结果。

nebula> MATCH (v:player) \
        WITH v.player.name AS Name \
        ORDER BY Name DESC \
        LIMIT 3 \
        RETURN collect(Name);
+-----------------------------------------------+
| collect(Name)                                 |
+-----------------------------------------------+
| ["Yao Ming", "Vince Carter", "Tracy McGrady"] |
+-----------------------------------------------+

结合 RETURN 语句使用

WITH子句中设置别名,并通过RETURN子句输出结果。

nebula> WITH [1, 2, 3] AS `list` RETURN 3 IN `list` AS r;
+------+
| r    |
+------+
| true |
+------+

nebula> WITH 4 AS one, 3 AS two RETURN one > two AS result;
+--------+
| result |
+--------+
| true   |
+--------+

标签:语句,RETURN,name,nGQL,nebula,player,sql,age
From: https://www.cnblogs.com/bonelee/p/17614957.html

相关文章

  • mysql中 You can’t specify target table for update in FROM clause 解决方案
    在mysql中更新数据,出现Youcan'tspecifytargettableforupdateinFROMclause错误,这句话意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。updatetablesetdel_flag='2'whereid=#{id}ORdept_idIN(SELECTt.idFROMtabletWHEREfind_......
  • 如何使用goconvey对gin+gorm+mysql搭建的后台进行集成测试
    集成测试对于项目的质量和稳定性非常重要。那么如何实现一个基于真实数据库的测试流程呢?首先,我们需要创建一个专门用于测试的数据库。比如,我自己使用的是以"test_"开头的数据库名。//创建测试数据库funcSetupForTest()(errerror){ db,err=gorm.Open(setting.DatabaseSe......
  • Sqoop 连接mysql 错误 java.lang.NoClassDefFoundError(已解决)
    错误信息Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/commons/lang/StringUtilsatorg.apache.sqoop.manager.MySQLManager.initOptionDefaults(MySQLManager.java:73)atorg.apache.sqoop.manager.SqlManager.<init......
  • MySql日期格式化
    字符串转日期STR_TO_DATE()函数:占位符含义%Y年份,四位数字%m月份,两位数字%d日期,两位数字%H小时,24小时制,两位数字%i分钟,两位数字%s秒数,两位数字selectSTR_TO_DATE('2023-01-0112:00:00','%Y-%m-%d%T')fromdual;结果:2023-01-0112:00:00......
  • 记录:jdbc调用sqlserver存储过程
    1、现场为内网环境,不利于测试2、调用sqlserver存储过程,报错:为过程或函数**指定了过多的参数一、制作本地sqlserver环境1、docker安装sqlserver#获取镜像dockerpullmcr.microsoft.com/azure-sql-edge#启动账号:sa密码:Password@dockerrun-e'ACCEPT_EU......
  • 高频SQL 50题(基础版): 寻找用户推荐人 | 2023-08-08
    问题表:Customer+-------------+---------+|ColumnName|Type|+-------------+---------+|id|int||name|varchar||referee_id|int|+-------------+---------+在SQL中,id是该表的主键列。该表的每一行表示一个客户的id......
  • warning: /var/cache/yum/x86_64/7/mysql57-community/packages/mysql-community-comm
    问题描述在我正确地安装好mysql包之后,再安装mysql,就出现了这么一个问题:就去疯狂百度找解决问题的方法!!!问题解决经过查找资料,才发现,原来是有GPG验证检查,只需要禁止GPG验证检查就行啦!也就是在安装mysql的语句后面,加上这样一个语句:--nogpgcheck总起来就是:yum-yinstallmys......
  • SQL 中 select 和 group by 中数据的相互约束关系
    前提本文的前提是mysql的sql_mode中含有ONLY_FULL_GROUP_BY。如果不含有ONLY_FULL_GROUP_BY,那么就没有本文后续说的限制。可以使用下面这条sql查看。SHOWVARIABLESLIKE'sql_mode';--输出sql_mode|ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZER......
  • Mysql 备份
    @echooffecho设置MySql数据库的连接信息sethost=127.0.0.1setport=3306setuser=rootsetpass=Mysql@Zhengshiecho设置要备份MySql数据库名称setdbname=crmecho获取当天的日期格式,例如:2022-12-13-14-30-40setbackup_date=%date:~0,4%-%date:~5,2%-%date:~8,2%-%......
  • MySQL索引
    MySQL的索引是一种数据结构,它可以帮助数据库系统更高效地获取数据。以下是MySQL索引的一些主要特性和使用方法:索引类型:MySQL支持多种类型的索引,包括B-Tree索引、哈希索引、全文索引、空间索引等。其中,B-Tree索引是最常用的索引类型。创建索引:你可以在创建表的时候创建索引,也可......