Нужно сделать такую выборку (взято из ТЗ):
1. Все поля из /CCPM/D_BOREQ
2. Все поля из /CCPM/D_BOREQOBL
3. Заказ СО для ЗнО (EKKN.AUFNR) - одно поле
4. Все поля из IFLOT для заказов ММ.
Соединения таблиц:
/CCPM/D_BOREQ-REQUESTUUID = /CCPM/D_BOREQOBL-REQUESTUUID,
(EKKN-EBELN = /CCPM/D_BOREQOBL-OBLEBELN AND EKKN-EBELP = /CCPM/D_BOREQOBL-OBLEBELP)
ILOA-AUFNR = EKKN.AUFNR
IFLOT-ILOAN = ILOA.ILOAN+есть ограничения всякие, но мне именно интересно как сам JOIN этих таблиц сделать всех.
Писал сначала всё просто через JOIN, но тогда была проблема - у некоторых /CCPM/D_BOREQOBL-OBLEBELN пустой и видимо не присоединялись остальные таблицы (ekkn,iloa,iflot).
А нужно так: /ccpm/d_boreqobl нужно брать всегда, даже если OBLEBELN пусто. (Т.е. из /CCPM/ таблиц всегда брать данные, а из таблиц ekkn,iloa,iflot, если есть связь.
Например в /CCPM/D_BOREQOBL:
REQUESTUUID OBLEBELN OBLEBELP
F40312313123 40000046 00010
F93939393155 40000046 00010
F55555555555 ________ 00000
А в EKKN
EBELN EBELP *остальные поля
40000045 00010 *остальные поля
40000046 00010 *остальные поля
То в результате должно быть 3 записи.
REQUESTUUID OBLEBELN OBLEBELP *остальные поля
F40312313 40000045 00010 *остальные поля
F93939393 40000046 00010 *остальные поля
F55555555 ________ 00000 *пустые поля
Пишу
Code:
SELECT (список полей) FROM /ccpm/d_boreq JOIN /ccpm/d_boreqobl ON (условие)
LEFT JOIN ekkn ON /ccpm/d_boreqobl~oblebeln = ekkn~ebeln AND /ccpm/d_boreqobl~oblebelp = ekkn~ebelp
JOIN iloa ON iloa~aufnr = ekkn~aufnr
JOIN iflot ON iflot~iloan = iloa~iloan
В итоге получается совсем не то, что надо. Можете подсказать как переписать такой селект?
И вообще я не совсем понимаю как такой запрос отрабатывает. В какой последовательности идут join'ы.