ВЫБРАТЬ ИЗ нескольких таблиц В одну внутреннюю таблицу - PullRequest
0 голосов
/ 08 июня 2018

Мои таблицы базы данных:

db_1
db_2
db_3

Моя внутренняя таблица:

it_comb

it_comb имеет структуру с некоторыми полями из db_1, db_2, db_3.

ВсеТаблицы БД имеют различную структуру.

Я хочу выбрать все из db_1, db_2, db_3 в правильные поля it_comb с условием where.

Я хотел бы сделать что-то вроде этого: (Это не работает)

SELECT * From db_1, db_2, db_3 into CORRESPONDING FIELDS OF TABLE it_comb WHERE db_1-MATNR LIKE db_2-MATNR AND db_1-MATNR LIKE db_3-MATNR.

Очевидно, это не работает, потому что я не могу использовать ',' вот так.Как мне написать это в ABAP?Так что it_comb заполняется данными из db_1, db_2 и db_3.

Другая проблема заключается в том, что каждый раз, когда я выбираю что-то в it_comb, мои предыдущие данные перезаписываются.

Пример кода будет полезен дляABAP-новичок.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Без JOIN я выполнял инструкции SELECT один за другим следующим образом

data it_comb type TABLE OF vbak.

select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM vbak UP TO 10 ROWS.
select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM vbrk UP TO 10 ROWS.
select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM likp UP TO 10 ROWS.
0 голосов
/ 12 июня 2018

Еще одна вещь, которую вы можете сделать в более новых версиях ABAP, это

select * from mara inner join mvke on mvke~matnr = mara~matnr into table @data(lt_combined).    
loop at lt_combined into data(ls_combined).
  write: / ls_combined-mara-matnr, ls_combined-mvke-vkorg.
endloop.

, это определит и заполнит вашу внутреннюю таблицу за один шаг без необходимости отдельного оператора "data".

Обратите внимание, что в соединении с * вы получите внутреннюю таблицу с подструктурами, основанными на именах таблиц - поскольку структура подразумевается в списке полей выбора, вы также можете сделать что-то подобноедля более эффективного запроса к базе данных (чтобы не нужно было возвращать все поля), что также устраняет подструктуры:

select mara~matnr, mvke~vkorg from mara inner join mvke on mvke~matnr = mara~matnr into table @data(lt_combined).
loop at lt_combined into data(ls_combined).
  write: / ls_combined-matnr, ls_combined-vkorg.
endloop.

Надеюсь, это поможет!

0 голосов
/ 08 июня 2018

Вы можете использовать внутреннее объединение -

SELECT * APPENDING CORRESPONDING FIELDS OF TABLE it_comb
FROM db_1 AS a
INNER JOIN db_2 AS b
ON a~matnr = b~matnr
INNER JOIN db_3 AS c
ON a~matnr = c~matnr
WHERE (Your any other condition).

APPENDING не будет перезаписывать предыдущую запись из внутренней таблицы it_comb.

Предупреждение: используйте APPENDING, если внутренняя таблицаэто TYPE STANDARD в противном случае вы получите дамп.Также проверьте документацию SELECT - JOIN

...