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

子查询中ORDER BY的SQL错误(使用TOP),sql,sybase-asa,Sql,Sybase Asa,我从以下查询中得到“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.

我从以下查询中得到“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
                 );

如果删除ORDERBY子句,查询将正常运行,但不幸的是,必须从降序列表中提取,而不是从升序列表中提取。我找到的所有与此相关的答案都表明必须使用TOP,但在这种情况下,我已经在使用它了。当TOP和ORDERBY不是子查询的一部分时,我对它们没有任何问题。有什么想法吗?

排序依据中的RecordID不明确。在其前面添加适当的表别名,例如iv.RecordID。

我会使用max而不是top 1。。。订购人

选择i.ItemID、i.Description、v.VendorItemID 第i项 加入 v、 记录ID= 选择maxRecordID 来自第四项 哪里 iv.VendorID=i.VendorID和
iv.ParentRecordID=i.RecordID

此错误与TOP无关。
ASE只是不允许在子查询中使用ORDERBY。这就是错误的原因。

如果select子句中没有歧义,为什么order by子句中有歧义?Order by子句引用select列表。“我没有sybase,你有能力检查它吗?”哈姆雷特·哈科比安:好眼睛!我错过了。在这两个地方都很可能模棱两可。我不知道它在sybase中是如何工作的,但在sql server的情况下,在这种情况下没有模棱两可之处。在相关查询中,如果子查询表是一个表,且未明确指定,则引擎会引用该子查询表。不幸的是,模糊性不是问题所在:使用iv.RecordID也不起作用,并且只要删除order by,仅使用RecordID对select语句起作用。如果使用max而不是top,会发生什么情况?使用max会导致相同的错误,但这是意料之中的,因为在子查询中使用ORDERBY需要使用top。您的建议可能是希望我不要使用ORDERBY,我误解了。你说得对,谢谢!非常感谢。虽然这不能解释为什么我会犯错误,但它确实解决了我的问题!