Значит так, для начала кто есть кто из команд. Как я понимаю с точки зрения OpenSQL:
INNER JOIN = JOIN
LEFT OUTER JOIN = LEFT JOIN
т.е. INNER и OUTER можно в принципе не использовать, так как просто JOIN это всегда INNER, а LEFT JOIN это всегда LEFT OUTER JOIN.
Далее так для справки, в соединении можно использовать до 25 таблиц, точнее одна таблица основная после FROM и к ней можно логически присоединить еще 24 таблицы.
Теперь как вся эта кухня работает, опять же только мои мысли, если что-то скажу не так, ну значит ошибся. И так имеем соединение таблиц, используя команду JOIN (от же INNER JOIN), система, выполняет по заданному условию JOIN <…> ON <…>, объединение двух таблиц. При этом, если для какой-то из записей при объединения нет соответствия в соседней таблице, то такие записи удаляются, т.е. считается что объединение не произошло, т.е например есть две таблицы со следующими записями:
Пример объединения таблиц по полям WERKS и LGORT
Таблица: TABLE_ONE (Поля в таблице: WERKS. LGORT, TEXT)
1000 0001 Test
1000 0002 Test
1000 0003 Test
1000 0004 Test
1000 0005 Test
Таблица: TABLE_TWO (Поля в таблице: WERKS. LGORT, TEXT)
1000 0002 Test
1000 0005 Test
1000 0007 Test
Система выполнит объединение и получит сначала следующую таблицу
1. 1000 0001 Test
2. 1000 0002 Test = 1000 0002 Test
3. 1000 0003 Test
4. 1000 0004 Test
5. 1000 0005 Test = 1000 0005 Test
6. = 1000 0007 Test
Теперь произойдет удаление записей 1, 3, 5 и 6 так как для этих записей нет соответствия друг другу, а после этого выполнится применение условия отбора для записей 2 и 5 по условию указанному после WHERE соответственно задав, например склад TABLE_TWO~LGORT = «0005» записи будут выбраны, точнее будет выбрана одна запись 5. Для склада 0004 соответственно система скажет, что записей в выборе нет.
Теперь сделаем объединение таблиц, используя соединение LEFT JOIN (оно же LEFT OUTER JOIN). Произойдет такое же объединение таблиц? как и случае с INNER, но после объединения будут удалены только записи таблицы TABLE_TWO, которые не имеют соответствия в таблице TABLE_ONE, т.е. результирующий набор будет иметь в своем составе записи с 1 по 5, после чего на эту таблицу будет наложено условие, заданное в WHERE, т.е. соответственно если ограничение будет по складу TABLE_TWO~LGORT = «0005», то будет выбрана одна запись, а если там будет задан склад «0007», то соответственно ничего не будет выбрано, так как записи с таким складом после выполнения объединения в полученном наборе не будет.
Вывод раз: Сначала идет объединения таблиц указанных в запросе и только потом на результирующий набор накладывается условие WHERE. Объединение идет согласно заданным правилам т.е. или INNER или LEFT.
Вывод два: Так как OpenSQL это не совсем те SQL-ли которые есть в разных базах, т.е. это какое-то среднее звено, со своими ограничениями, т.е. например нельзя в ограничениях WHERE указать значения по таблице которая соединяется через LEFT JOIN, ну по крайней мере у меня говорит что: No fields from the right-hand table of a LEFT OUTER JOIN may appear in the WHERE condition: "FOUR~LGORT", т.е. таблица которая соединена через LEFT не разрешает использовать свои поля в условии отбора WHERE, поэтому как у вас получилось задать для LEFT OUTER JOIN table_5 использовать поля пятой таблицы в WHERE table_5~field_10 = 'ABC' у меня так не выходило ограничивать объединение.
PS: Ну типа такие мысли. Если кто может поправить, пишем…