web-dev-qa-db-fra.com

SÉLECTIONNEZ À PARTIR DE plusieurs tables DANS UNE seule table interne

Mes tables db:

db_1
db_2
db_3

Ma table interne:

it_comb

it_comb a une structure avec quelques champs de db_1, db_2, db_3.

Toutes les tables db ont des structures différentes.

Je veux tout sélectionner de db_1, db_2, db_3 dans les champs corrects de it_comb avec une condition where.

Je voudrais faire quelque chose comme ça: (ça ne marche pas)

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.

Évidemment, cela ne fonctionne pas parce que je ne peux pas utiliser "," comme ça. Comment écrire ceci dans ABAP? Pour que it_comb soit rempli de données provenant de db_1, db_2 et db_3.

Un autre problème est que chaque fois que je sélectionne quelque chose dans it_comb, mes données précédentes sont écrasées.

Un exemple de code serait apprécié pour ABAP-Débutant.

3
KevinMueller

Vous pouvez utiliser la jointure interne -

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 n'écrasera pas l'enregistrement précédent de la table interne it_comb.

Avertissement: utilisez APPENDING si la table interne est TYPE STANDARD sinon vous obtiendrez un vidage. Aussi vérifiez la documentation SELECT - JOIN

4
divScorp

Une autre chose que vous pouvez faire dans les nouvelles versions d'ABAP est

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.

cela définira et remplira votre table interne en une seule étape sans avoir besoin d'une instruction "data" distincte.

Notez que dans une jointure avec *, vous obtiendrez une table interne avec des sous-structures basées sur les noms de table - puisque la structure est impliquée dans la liste de champs de la sélection, vous pouvez également faire quelque chose comme ça pour une requête de base de données plus efficace (il n'a donc pas besoin de renvoyer tous les champs) ce qui élimine également les sous-structures:

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.

J'espère que cela t'aides!

1
TallDave

Sans JOIN, j'ai exécuté les instructions SELECT une par une comme suit

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
Eralper