子查询中ORDER BY的SQL错误(使用TOP)

时间:2016-01-22 18:54:19

标签: sql sybase-asa

我从以下查询中获得Syntax error near 'ORDER'

SELECT i.ItemID, i.Description, v.VendorItemID
FROM Items i 
JOIN ItemVendors v ON
    v.RecordID = (
                 SELECT TOP 1 RecordID
                 FROM ItemVendors iv
                 WHERE
                     iv.VendorID = i.VendorID AND
                     iv.ParentRecordID = i.RecordID
                 ORDER BY RecordID DESC
                 );

如果删除ORDER BY子句,查询运行正常,但不幸的是,从降序列表中提取而不是提升。我发现与此相关的所有答案都表明必须使用TOP,但在这种情况下我已经在使用它了。当TOPORDER BY不属于子查询时,我不会遇到任何问题。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

ORDER BY中的

RecordID含糊不清。在其前面添加适当的表别名(例如,iv.RecordID)。

答案 1 :(得分:2)

此错误与TOP无关。 ASE根本不允许在子查询中使用ORDER BY。这就是导致错误的原因。

答案 2 :(得分:0)

我使用max而不是top 1 ... order by

SELECT i.ItemID,i.Description,v.VendorItemID 从项目i JOIN ItemVendors v ON     v.RecordID =(                  SELECT max(RecordID)                  来自ItemVendors iv                  哪里                      iv.VendorID = i.VendorID AND                      iv.ParentRecordID = i.RecordID);