19.08.2004, 09:32 | #1 |
Участник
|
Сложные SQL запросы
Что то я не понимаю одной вещи - можно ли в Аксапте программно сделать запрос, выбирающий данные сразу из нескольких таблиц (по JOIN) и если да, то как осуществляется работа с результатом?? Например у меня есть две связанные по ItemID таблицы (InventTable и InventItemBarcode), мне желательно в один запрос извлечь все штрих-коды (InventItemBarcode.ItemBarcode) и названия номенклатур из связанной InventTable для этих штрих-кодов. На SQL запрос реализующий такое выглядит примерно так (за корректность синтаксиса не ручаюсь):
SELECT IT.ItemName, IIT.ItemBarcode FROM InventTable as IT, InventItemBarcode as IIT WHERE IIT.ItemId = IT.ItemId (для более корректного результата лучше использовать JOIN, но это не суть вопроса) Как такое провернуть в аксапта и (самое главное) как потом итерировать по строкам результата, чтобы в итерации были доступны и InventTable.ItemName и InventItemBarcode.ItemBarcode?? |
|
19.08.2004, 09:56 | #2 |
Участник
|
что-то типа этого
PHP код:
|
|
19.08.2004, 10:01 | #3 |
Участник
|
Вообще-то, ответом на такие вопросы является отправка читать мануал.
PHP код:
|
|
19.08.2004, 10:09 | #4 |
Модератор
|
Да можно и попроще, без Query:
PHP код:
Георгий |
|
19.08.2004, 10:27 | #5 |
Участник
|
Цитата:
Просто прочитай HELP по команде SELECT
Теперь, внимание, вопрос №1: как правильно итерировать по такому селекту без while select: select inventTable join inventItemBarcode where inventTable.ItemId == inventItemBarcode.ItemId 1. while ( inventTable ) // ??? { ... next inventTable; next inventItemBarcode } или достаточно будет написать 2. while ( inventTable ) // ??? { ... next inventTable; } Ответ смогу найти сам через Job, интересно другое - что случится, если в InventTable не найдется номенклатруры соответствующей данному штрих-коду (реально такая ситуация возможна, inner join в SQL насколько я помню должен просто вернуть пустую inventTable.itemName)? видимо запрос надо переписать как select inventItemBarcode join inventTable where inventTable.ItemId == inventItemBarcode.ItemId и правильно итерировать без while select, так: while ( inventItemBarcode ) { ... next inventTable; next inventItemBarcode } Вопрос ответа на который нет в мануале... |
|
19.08.2004, 10:33 | #6 |
----------------
|
А мне понравилось вот это
Цитата:
(для более корректного результата лучше использовать JOIN, но это не суть вопроса)
Цитата:
реально такая ситуация возможна, inner join в SQL насколько я помню должен просто вернуть пустую inventTable.itemName
|
|
19.08.2004, 10:36 | #7 |
Участник
|
ой, гоню в последнем речь идет про outer join
|
|
19.08.2004, 10:39 | #8 |
Участник
|
[quote[Результат либо корректный (правильный), либо нет.[/quote]
не совсем так. тут я говорю про разницу поведения inner join и outer join, которые в общем ведут себя похоже, но если в таблице InventTable отсутствует сопоставление с каким бы то ни было штрих-кодом мне нужен результат outer join |
|
19.08.2004, 10:58 | #9 |
Участник
|
Всем спасибо, всё просто круто.
|
|
|
|