Показать сообщение отдельно
Старый 29.01.2009, 17:03   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
! Порядок выполнения GroupBy и Exists Join для временных таблиц
Как должна выполнятся конструкция вида
X++:
    while select tmpTable1
    group by GroupId
    exists join tmpTable2
    where
         tmpTable2.Id == tmpTable1.Id
?

По аналогии с постоянными таблицами можно предположить, что сначала из таблицы tmpTable1 выберутся строкии, Id которых соответствуют строкам из таблицы tmpTable2. И затем отобранные строки сгруппируются по полю GroupId.

На практике же оказывается что group by отрабатывает первым. Причём значение поля id не обнуляется, а становится равным значению из первой строки группы (первой по очерёдности вставки). И вот уже с этими Id продолжает работать exists join. Естественно результат такой выборки мало предсказуем.

Данный баг уже был описан ранее? Или это фича такая?