none
SQL Server Compact 嵌套查询的问题 “Token in error = select” RRS feed

  • 问题

  • 如下查询提示“分析查询时出错。”,“Token in error = select”

    select a.Name, (select count(0) from TblB b where b.PID=a.ID) as Cnt from TblA a

    用于统计所有栏目下面的文章数。如何解决如上错误?


    www.fengyun.org
    • 已移动 孟宪会 2011年4月8日 0:41 (发件人:Web, IE 9相关讨论 (IIS,IE8等))
    2011年4月7日 13:06

全部回复

  • 试试:

    select a.Name, count(*) as Cnt from TblA a,TblB  b where b.PID=a.ID group by a.name

    可能是 compact版本不支持这种语法。

     


    family as water
    2011年4月8日 2:47
  • 谢谢答复,

    按照上面的写法,只会列出有文章的栏目。我希望列出所有栏目,并显示每一个栏目的文章数。

    尝试改成left join,结果每个栏目文章数都显示1

    2011年4月8日 8:43
  • 使用如下语句实现了最终效果:
    select a.Name, (case isnull(b.Cnt) when 1 then 0 else b.Cnt end) as Members from T_Department a
    left join (select DeptID, Count(0) as Cnt from T_User group by DeptID) b on a.ID=b.DeptID

    代码比较长,按照一般的写法:
    select a.Name (select count(0) from T_User b where b.DeptID=a.ID) as Members from T_Department a
    简单多了。不过分析性能,前者由于一次性从用户表统计出结果,后者每个部门都要从用户表统计一次,所以性能方面前者或许达到了更优化。

    • 已标记为答案 流氓枫 2011年4月9日 8:17
    • 取消答案标记 流氓枫 2011年4月13日 0:51
    2011年4月9日 8:17
  • 但是这样也不见得性能就是最好的,上面的例子中,假如多个部门人数极大,部门数量也众多,而我只需要统计某几个部门的人数,而这几个部门的人数可能都不会很多,用上面的方法,效率就会低下了。这时候还是得用聚合方式进行统计。

    www.fengyun.org
    2011年4月13日 0:51