12.05.2004, 14:55 | #1 |
Участник
|
Ошибочное выполнение запроса Axapt-ой
Подскажите что неправильно в следующем запросе ...
Он подразумевает объединение временной и постоянной таблиц, выборку по условиям и группировку результата по 3м (хотя это не принципиально) полям. Проблема в том, что неправильно работает группировка, те в выборке получаються записи(>1) с одинаковыми полями, учавствующими в group by выражении. Причем проблема только при объединении и группировке временной таблицы (в данном случае TmpFrmVirtual ) и постоянной (в примере это InventTrans). Вопрос в том можно ли вообще в одном запросе использовать временную и пост. таблицы и если да то что я делаю неправильно? Axapta 2.5 PHP код:
|
|
12.05.2004, 15:14 | #2 |
Участник
|
join со временной таблице транслируется Акскптой в нечто вроде
while select tmpTable { while select inventTrans group by F1, F2 { } } Естественной никакой уникальности полей F1, F2 в данном случае не гарантируется. |
|
12.05.2004, 15:44 | #3 |
Участник
|
Продублируй Group BY для tmpFrmVirtual (или для inventTrans)
PHP код:
|
|
12.05.2004, 16:11 | #4 |
Участник
|
Временную и постоянную таблицу можно использовать в одном запросе, но с известной степенью осторожности. Смотри поиском по сайту - это не раз обсуждалось.
В твоем случае логичнее было бы использовать exists join, а не inner join, поменяв при этом порядок следования таблиц в запросе. Однако, это всё равно не прокатит, т.к. поле для связки с временной таблицей (inventTrans.InventTransId) не входит в состав полей секции group by и соответственно не войдет в выборку. По-моему, здесь дело не во временной таблице. |
|
12.05.2004, 17:00 | #5 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
Продублируй Group BY для tmpFrmVirtual (или для inventTrans) ... Непонятно, почему ты собственно ожидал уникальности данных, если поле InventTransId даже не включено в список групировки? |
|
12.05.2004, 17:53 | #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 - это постоянная таблица, вместо временной |
|
13.05.2004, 09:24 | #7 |
Участник
|
Цитата:
Изначально опубликовано axz
А во временной все и дело, потому что если вместо временной использовать постоянную, то результат получается правильный. |
|
13.05.2004, 09:32 | #8 |
Участник
|
Цитата:
Изначально опубликовано dn
Т.е. trud был абсолютно прав. Спасибо, буду иметь в виду. |
|
13.05.2004, 10:03 | #9 |
NavAx
|
PHP код:
__________________
Чудес не бывает (c), истина где-то рядом (c)... |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Подготовка запроса(ламерские вопросы продолжаются) | 4 | |||
Изменить план выполнения запроса | 2 | |||
Быстродействие запроса | 1 | |||
Оптимизация запроса | 16 | |||
Теория: Создание отчета в виде Запроса | 6 |
|