2016-01-22 7 views
2

Я получаю Syntax error near 'ORDER' из следующего запроса:SQL ошибка ORDER BY в подзапросе (TOP используется)

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, но в этом случае я его уже использую. У меня нет проблем с TOP и ORDER BY, когда это не часть подзапроса. Есть идеи?

+0

Что произойдет, если вы используете 'max()' вместо 'top'? –

+0

Использование 'max()' вызывает ту же ошибку, но это ожидается, потому что использование 'order by' в подзапросе требует использования' top'. –

+0

Вы, вероятно, предназначались для того, чтобы я не использовал 'order by' с вашим предложением, и я неправильно понял. Вы были правы, спасибо! –

ответ

0

Я хотел бы использовать макс вместо верхней 1 ... заказ по

ВЫБОР i.ItemID, i.Description, v.VendorItemID ИЗ Items я РЕГИСТРИРУЙТЕСЬ ItemVendors V ON v.RecordID = ( SELECT max (RecordID) FROM ItemVendors iv WHERE iv.VendorID = i.VendorID AND iv.ParentRecordID = i.RecordID);

+0

Спасибо! Хотя это не объясняет, почему я получал ошибку, я был, она действительно решает мою проблему! –

2

RecordID в ORDER BY неоднозначно. Добавьте перед ним соответствующий псевдоним таблицы (например, iv.RecordID).

+1

Если в предложении select нет двусмысленности, почему есть предложение по порядку? Предложение order by относится к списку выбора. У меня нет sybase, есть ли у вас возможность проверить это? –

+0

@ HamletHakobyan Хороший глаз! Я пропустил это. В обоих местах вполне может быть неоднозначным. –

+0

Я не знаю, как это работает для sybase, но в случае sql-сервера в этом случае нет никакой двусмысленности. В коррелированных запросах движок ссылается на таблицу подзапроса (если это одна таблица), если ничего явно не указано. –

2

Эта ошибка не имеет ничего общего с TOP. ASE просто не разрешает ORDER BY в подзапросе. В этом причина ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^