Предположим, что нужно выбрать данные из таблицы 1 и дополнить их данными из таблиц 2 и 3. Причем таблица 3 относиться к таблице 2.
Прикинув получаем вот такой запрос:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
"Запрос 1 SELECT mspr~matnr, mspr~charg, vepo~vemng, vepo~venum, vepo~altme, vepo~wdatu, vepo~vbeln FROM mspr LEFT JOIN vepo ON vepo~matnr = mspr~matnr AND vepo~werks = mspr~werks AND vepo~lgort = mspr~lgort AND vepo~charg = mspr~charg LEFT JOIN vekp ON vekp~venum = vepo~venum INTO TABLE @DATA(ltd_result_1) WHERE mspr~matnr = '000000001300000160' AND mspr~lgort = '6101' AND mspr~werks = '3100' . |
Получаем вот такую выборку:
Как видно из выборки, для строки 8 мы не нашли запись в таблице VEPO. Но так как у нас LEFT JOIN она все равно попала в выборку.
Теперь, допустим, нам необходимо немного ограничить выборку из таблицы VEPO и мы делаем INNER JOIN таблиц VEPO И VEKP. При этом, казалось бы строка 8 должна остаться в выборке т.к. соединение таблиц MSPR и VEPO осталось без изменений и в данном случае, что там у нас случилось с VEPO, вообще не должно играть роли. Однако это не так. Как мы видим в результате, запись с пустым не найденным VEPO не выбралась.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
"Запрос 2 SELECT mspr~matnr, mspr~charg, vepo~vemng, vepo~venum, vepo~altme, vepo~wdatu, vepo~vbeln FROM mspr LEFT JOIN vepo ON vepo~matnr = mspr~matnr AND vepo~werks = mspr~werks AND vepo~lgort = mspr~lgort AND vepo~charg = mspr~charg INNER JOIN vekp ON vekp~venum = vepo~venum INTO TABLE @DATA(ltd_result_2) WHERE mspr~matnr = '000000001300000160' AND mspr~lgort = '6101' AND mspr~werks = '3100' . |