为什么neo4j中的order by子句与SQL Server中的order by子句在同一记录上的工作方式不同?

时间:2018-03-30 14:28:32

标签: sql-server tsql neo4j graph-databases cql

我已在SQL Server 2014中的表中创建了这些记录。

Tom Cruise
Hunain
Anthony Hopkins
Aalishan
NULL

当我跑

Select name from table1 order by name desc
然后它返回:

Tom Cruise
Hunain
Anthony Hopkins
Aalishan
NULL

当我跑

Order by name asc 
然后它返回

NULL
Aalishan
Anthony Hopkins
Hunain
Tom Cruise

嗯,好。我知道,为什么。

但是当我在neo4j的数据库中放入相同的记录并运行此查询时:

Match(n:lblNames) return n.name order by n.name desc
然后它返回:

 null
"aalishan"
"Tom Cruise"
"Hunain"
"Anthony Hopkins"

并且对于asc,它返回此

"Anthony Hopkins"
"Hunain"
"Tom Cruise"
"aalishan"
null

为什么?

1 个答案:

答案 0 :(得分:3)

看起来像Neo4j首先以大写字母排序。可能遵循ASCII排序。

https://en.wikipedia.org/wiki/ASCII

来自文档:

  

3.3.8.5。 Ordering null在对结果集进行排序时,null将始终位于结果集的末尾,用于升序排序,并且首先   在进行降序排序时。

在SQL Server设置中,A = a用于排序。所以aalishan会在Anthony之前。

在Neo4J中,A < a用于排序,意味着大写字母在小写之前。这就是汤姆在aalishan之前的原因。对于NULL,SQL Server在升序之前将NULL置于之前,Neo4J根据文档在末尾执行NULL升序。