5

我尝试在 Sybase ASE 12 上使用建议的查询,但它抱怨语法错误。

SELECT 
    item, 
    ( SELECT TOP 1 tags.tag
      FROM #tags tags
        LEFT JOIN t o
          ON  tags.tag = o.tag
          AND o.item_id = n.item_id 
      WHERE o.tag IS NULL
      ORDER BY tags.tag
    ) 'tag',
    value  
FROM
    t_new n

错误:Incorrect syntax near the keyword 'top'.

但是,当我将 ( TOP 1 tag... ORDER BY tag) 替换为 MAX() 时,相同的查询仍然有效:

SELECT 
    item, 
    ( SELECT max(tags.tag)
      FROM #tags tags
        LEFT JOIN t o
          ON  tags.tag = o.tag
          AND o.item_id = n.item_id 
      WHERE o.tag IS NULL
        --  ORDER BY tags.tag
    ) 'tag',
    value  
FROM
    t_new n
  • 为什么在 Sybase 的相关子查询中使用 ( TOP 1 tag... ) 会出现问题?ORDER BY tag

  • 对不使用 min()/max() 的原始查询是否有任何修复?

4

2 回答 2

5

Adaptive Server Enterprise 12.5.3 版支持外部查询选择语句中的 top n 子句,但不支持子查询的选择列表。这与 Microsoft SQL Server 不同。在子查询中对 Adaptive Server 使用 top n 子句的任何尝试都会产生语法错误。

来自此处的 ASE 12.5.3 文档

于 2013-02-15T14:31:53.987 回答
0

我知道这已经很晚了,但是对于其他人来说,子查询中的 TOP 可以在 sybase 最新版本中使用。

于 2014-09-09T09:57:09.173 回答