|  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 | |||
| 
 |