在运算符中不使用 OrientDB 中的子查询

问题描述

我在 OrientDB 中有以下 sql 查询来查找社交网络中最活跃客户的姓名:

SELECT name
FROM Customer
Where id in (Select id,count(id) as cnt
             from (Select IN('PersonHasPost').id[0] as id
                   From Post
                   Where creationDate>= date( '2012-10-01','yyyy-MM-dd')
                  )
             Group by id
             Order by cnt DESC 
             limit 10
            )
GROUP BY id;

但是这个查询没有返回任何结果。 当我单独运行子查询时,它确实为我提供了 10 个最活跃客户的 ID,以及帖子数量,这让我认为 in 运算符有问题。 我在这里做错了什么? 我在 OrientDB 3.0.5 上运行这个查询

解决方法

我可以立即看到一些问题。试试这个:

SELECT name
FROM Customer
Where id in (Select id
             from (Select IN('PersonHasPost').id[0] as id
                   From Post
                   Where creationDate>= date('2012-10-01','yyyy-MM-dd')
                  ) p
             Group by id
             Order by count(*) DESC 
             limit 10
            );

注意事项:

  • 您的子查询返回两列,但 IN 只需要 1。
  • 某些数据库需要派生表的表别名,因此这也可能是一个问题。
  • 外部 GROUP BYSELECT 不匹配。我不确定您真正想要什么,但我认为没有必要进行聚合或重复消除。