我試圖在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()?
在Sybase中,'top'和'order by'是互斥的。頂部的順序由聚簇索引決定。如果沒有聚集索引,那麼結果可能是不可預測的。另外,我認爲在ASE 12.5.3之前top不被支持,但我可能是錯的。另請參見: – 2013-02-14 14:55:14
另請參見:「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
@MichaelGardner - 我認爲你在第一條評論中錯了。如果包含Sybase文檔引用,則應該給出第二條評論。 – DVK 2013-02-14 15:28:32