![]() |
#1 |
Участник
|
![]()
Подскажите что неправильно в следующем запросе ...
Он подразумевает объединение временной и постоянной таблиц, выборку по условиям и группировку результата по 3м (хотя это не принципиально) полям. Проблема в том, что неправильно работает группировка, те в выборке получаються записи(>1) с одинаковыми полями, учавствующими в group by выражении. Причем проблема только при объединении и группировке временной таблицы (в данном случае TmpFrmVirtual ) и постоянной (в примере это InventTrans). Вопрос в том можно ли вообще в одном запросе использовать временную и пост. таблицы и если да то что я делаю неправильно? Axapta 2.5 PHP код:
|
|
![]() |
#2 |
Участник
|
join со временной таблице транслируется Акскптой в нечто вроде
while select tmpTable { while select inventTrans group by F1, F2 { } } Естественной никакой уникальности полей F1, F2 в данном случае не гарантируется. |
|
![]() |
#3 |
Участник
|
Продублируй Group BY для tmpFrmVirtual (или для inventTrans)
PHP код:
|
|
![]() |
#4 |
Участник
|
Временную и постоянную таблицу можно использовать в одном запросе, но с известной степенью осторожности. Смотри поиском по сайту - это не раз обсуждалось.
В твоем случае логичнее было бы использовать exists join, а не inner join, поменяв при этом порядок следования таблиц в запросе. Однако, это всё равно не прокатит, т.к. поле для связки с временной таблицей (inventTrans.InventTransId) не входит в состав полей секции group by и соответственно не войдет в выборку. По-моему, здесь дело не во временной таблице. |
|
![]() |
#5 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
Продублируй Group BY для tmpFrmVirtual (или для inventTrans) ... Непонятно, почему ты собственно ожидал уникальности данных, если поле InventTransId даже не включено в список групировки? |
|
![]() |
#6 |
Участник
|
Цитата:
Изначально опубликовано dn
Временную и постоянную таблицу можно использовать в одном запросе, но с известной степенью осторожности. Смотри поиском по сайту - это не раз обсуждалось. В твоем случае логичнее было бы использовать exists join, а не inner join, поменяв при этом порядок следования таблиц в запросе. Однако, это всё равно не прокатит, т.к. поле для связки с временной таблицей (inventTrans.InventTransId) не входит в состав полей секции group by и соответственно не войдет в выборку. По-моему, здесь дело не во временной таблице. Да с помощью exists join тоже не получиться. А во временной все и дело, потому что если вместо временной использовать постоянную, то результат получается правильный. Кстати вот запрос SQL: SELECT B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL FROM TABLE3 A,INVENTTRANS B WHERE (A.PRK_INVENTTRANSID=B.INVENTTRANSID) AND (B.TRANSTYPE=3) AND (B.STATUSRECEIPT=2) GROUP BY B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL ORDER BY B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL В данном случае TABLE3 - это постоянная таблица, вместо временной |
|
![]() |
#7 |
Участник
|
Цитата:
Изначально опубликовано axz
А во временной все и дело, потому что если вместо временной использовать постоянную, то результат получается правильный. |
|
![]() |
#8 |
Участник
|
Цитата:
Изначально опубликовано dn
Т.е. trud был абсолютно прав. Спасибо, буду иметь в виду. ![]() |
|
![]() |
#9 |
NavAx
|
PHP код:
![]()
__________________
Чудес не бывает (c), истина где-то рядом (c)... |
|
|
![]() |
||||
Тема | Ответов | |||
Подготовка запроса(ламерские вопросы продолжаются) | 4 | |||
Изменить план выполнения запроса | 2 | |||
Быстродействие запроса | 1 | |||
Оптимизация запроса | 16 | |||
Теория: Создание отчета в виде Запроса | 6 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|