|
14.11.2005, 12:51 | #1 |
Участник
|
Join FirstOnly
Пытаюсь разобраться как работает Join FirstOnly
Для примера у меня есть закупка номер «12345» В ней есть четыре строки с номенклатурами: Item1 Item2 Item3 Item4 Запускаю код: while Select purchTable Where purchTable.PurchId == "12345" Join FirstOnly purchLine Where purchLine.PurchId == purchTable.PurchId { info(purchLine.ItemId+' '+purchLine.PurchId); } Результат следующий: Item1 12345 Item2 12345 Item3 12345 Item4 12345 Разве недолжна вернуться только одна строчка Item1 12345 ? Для чего же тогда используется FirstOnly? |
|
14.11.2005, 13:13 | #2 |
Участник
|
Игнорирует она его в джойне. Ставьте в для мастер-таблицы (для purchTable)
__________________
Axapta v.3.0 sp5 kr2 |
|
14.11.2005, 13:42 | #3 |
Участник
|
Вот оно как…. Ну для мастер таблицы не подойдет, в реальной задаче мне нужно пройтись по всем строкам мастер таблицы и выбрать последнюю (одну) строку в подчиненной…. Придется вложенными селектами делать.
Ну тогда непонятно другое, а зачем выражение Join FirstOnly используется в стандартном функционале, даже на SYS слое, например \Classes\LedgerJournalTransUpdateVendCancel\checkSettleVoucher ?... Просто так что ли..... |
|
02.08.2007, 08:29 | #4 |
Участник
|
Как для подобной задачи реализовать подобие Join FirstOnly средствами аксапты? Может у кого появились идеи? Или всё также только вложенными циклами?
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
02.08.2007, 08:51 | #5 |
Модератор
|
Аксапта не может реализовать в одном запросе того, чего не может реализовать СУБД. Т.о. - в морг (пишите вложенные запросы)
__________________
-ТСЯ или -ТЬСЯ ? |
|
14.11.2005, 14:40 | #6 |
Участник
|
Ну в этом запросе firstOnly стоит и для мастер-таблицы, так что он вернет одну запись.
Но вы правы. Есть несколько мест, где указывается firstOnly только для детейл-таблицы (правда очень много с префиксом R или суффиксом _RU).
__________________
Axapta v.3.0 sp5 kr2 |
|
14.11.2005, 16:12 | #7 |
Administrator
|
Кроме того, обратите внимание на следующую цитату из Best Practice:
Цитата:
Remember, firstOnly does not guarantee that only one record is returned. Illegal: while select firstOnly - does not make sense.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
02.08.2007, 09:40 | #8 |
Участник
|
X++: static void Job(Args _args) { PurchTable purchTable; PurchLine purchLine; Counter counter; ; while select purchTable group by PurchId join maxof(ItemId) from purchLine where purchLine.PurchId == purchTable.PurchId { counter ++; info(strfmt('%1 %2', purchTable.PurchId, purchLine.ItemId)); if (counter == 20) break; } } Последний раз редактировалось dns; 02.08.2007 в 09:41. Причина: Изменение имён |
|
|
За это сообщение автора поблагодарили: computernik (1). |
02.08.2007, 11:12 | #9 |
Участник
|
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
02.08.2007, 09:41 | #10 |
Участник
|
Оно?
|
|
02.08.2007, 10:53 | #11 |
Участник
|
ОК Понял Спасибо.
В СУБД можно писать подзапросы в одном запросе. Правдо не понятно сколько реальных селектов это пародит...
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. Последний раз редактировалось 3oppo; 02.08.2007 в 10:57. |
|