2013-02-13 68 views
4

我試圖在Sybase ASE 12上使用proposed query,它抱怨語法錯誤。是否可以在Sybase ASE中使用具有「TOP 1列」的相關子查詢?

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 
  • 爲什麼使用(TOP 1 tag ... ORDER BY tag)Sybase的相關子查詢中存在問題?

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

+1

在Sybase中,'top'和'order by'是互斥的。頂部的順序由聚簇索引決定。如果沒有聚集索引,那麼結果可能是不可預測的。另外,我認爲在ASE 12.5.3之前top不被支持,但我可能是錯的。另請參見: – 2013-02-14 14:55:14

+0

另請參見:「Adaptive Server Enterprise 12.5.3版支持外部查詢select語句中的top n子句,但不支持子查詢的select列表中,這與Microsoft SQL Server不同,任何嘗試在Adaptive Server中使用top n子句在子查詢中產生語法錯誤。「從這裏的ASE 15.0.3文檔http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00641.1502/html/nfg1502/CHEHFFJJ.htm – 2013-02-14 14:59:13

+0

@MichaelGardner - 我認爲你在第一條評論中錯了。如果包含Sybase文檔引用,則應該給出第二條評論。 – DVK 2013-02-14 15:28:32

回答

4

Adaptive Server Enterprise version 12.5.3 supports the top n clause in outer query select statements, but not in the select list of a subquery. This differs from Microsoft SQL Server. Any attempt to use the top n clause with Adaptive Server in a subquery yields a syntax error.

從ASE 12.5.3文檔here

0

我知道已經晚了,但只是爲他人之上的子查詢中,可以在Sybase最新版本使用。

相關問題