Что может вызвать синтаксическую ошибку, если вы возьмете запрос SQL и выполните UNION с самим собой?

У меня есть эта странная ошибка в SQL Server 2005, когда я беру рабочий запрос, добавляю ключевое слово UNION под ним, а затем снова копирую запрос. На мой взгляд, это всегда должно работать, но это не так. Я получаю сообщение «Неправильный синтаксис рядом с ключевым словом union».

Что могло создать эту проблему?

Чтобы быть более конкретным, вот полный запрос:

select distinct deliveries.id, orders.id, 20 + sum(orders.mass1) as allowed_duration 
from features_resources  
inner join features on features.id = featureid 
inner join orders on orders.id = features_resources.resourceid 
inner join orderinformations on orders.id = orderinformations.orderid
inner join deliveries on orderinformations.deliveryid = deliveries.id
where features.name = 'O_FRAIS'
and     (deliveries.ID IN
                      (SELECT     ID
                        FROM          dbo.DeliveriesInExportedSchedule))

group by deliveries.id, features.name ,orders.id order by deliveries.id
union
select distinct deliveries.id, orders.id, 20 + sum(orders.mass1) as allowed_duration 
from features_resources  
inner join features on features.id = featureid 
inner join orders on orders.id = features_resources.resourceid 
inner join orderinformations on orders.id = orderinformations.orderid
inner join deliveries on orderinformations.deliveryid = deliveries.id
where features.name = 'O_FRAIS'
and     (deliveries.ID IN
                      (SELECT     ID
                        FROM          dbo.DeliveriesInExportedSchedule))

group by deliveries.id, features.name ,orders.id order by deliveries.id 

Я попытался воспроизвести ошибку в меньшем запросе, начав с простого запроса и добавляя функции одну за другой (внутреннее соединение, вложенные запросы, группировка по, сумма и т. Д.), Но не смог снова воспроизвести ошибку.

Любая идея ?


person madewulf    schedule 31.08.2010    source источник
comment
Попробуйте удалить предложения ORDER BY   -  person a'r    schedule 31.08.2010
comment
Вы правы, это была проблема   -  person madewulf    schedule 31.08.2010


Ответы (2)


На самом деле проблема заключается в order by deliveries.id в верхней половине.

order by необходимо применять ко всему запросу.

Пример синтаксиса

SELECT v1.number
FROM   master.dbo.spt_values v1
WHERE  v1.number > 2000

UNION

SELECT   v2.number
FROM     master.dbo.spt_values v2
WHERE    v2.number < 10
ORDER BY v1.number
person Martin Smith    schedule 31.08.2010

Попробуйте заключить отдельные SELECT в скобки:

(SELECT ... )
UNION
(SELECT ... )

В нынешнем виде вторые предложения WHERE и GROUP BY неоднозначны - должно ли это применяться к SELECT или к UNION? Я не могу сказать, как и ваш сервер БД.

person Piskvor left the building    schedule 31.08.2010
comment
это не работает, после попытки вы получите две ошибки о ORDER BY: Msg 156, Level 15, State 1, Line 12 Incorrect syntax near the keyword 'order'. Msg 156, Level 15, State 1, Line 25 Incorrect syntax near the keyword 'order'. - person KM.; 31.08.2010
comment
@KM: Извините, я плохо знаком с синтаксисом SQL Server; но он заставил сервер прояснить, в чем его проблема, не так ли? - person Piskvor left the building; 31.08.2010