Je veux faire la sélection suivante, mais elle a renvoyé une erreur que je ne sais pas quoi faire.
Les éléments de la liste "Sélectionner la liste" doivent être séparés à l'aide de virgules. P> BlockQuote>
Ma version est NW 7.4. Quelqu'un pourrait-il m'aider? P>
TYPES : BEGIN OF ty_meal, carrid TYPE smeal-carrid, mealnumber TYPE smeal-mealnumber, text TYPE smealt-text, END OF ty_meal, ty_meal_s TYPE STANDARD TABLE OF ty_meal WITH EMPTY KEY. DATA meals TYPE ty_meal_s. SELECT smeal~carrid smeal~mealnumber smealt~text INTO TABLE meals FROM smeal LEFT JOIN smealt ON smealt~carrid = smeal~carrid AND smealt~mealnumber = smeal~mealnumber WHERE smealt~sprache EQ 'E'.
3 Réponses :
Vous devez séparer les colonnes que vous sélectionnez code> avec des virgules, comme celui-ci
SELECT smeal~carrid, smeal~mealnumber, smealt~text
INTO TABLE @meals
FROM smeal
LEFT JOIN smealt
ON smealt~carrid = smeal~carrid
AND smealt~mealnumber = smeal~mealnumber
WHERE smealt~sprache EQ 'E'.
Avant de publier 7.40 SP05, vous ne pouvez pas utiliser la clause Cette restriction était logique car si une ligne est seulement dans la table de gauche , toutes les colonnes de la table droite sont considérées comme "null", donc, s'il y a une sélection sur une colonne de la table droite, la ligne ne sera pas sélectionnée (sauf si Le bon moyen est de définir la condition dans le où code> pour filtrer sur une colonne d'une table "droite" dans une jointure extérieure gauche ( ABAP 7.31 Doc :" Dans les jointures extérieures, toutes les comparaisons contiennent des colonnes de la Table de base de données ou vue DBTAB_Right sur le côté droit [...] Ces colonnes ne sont pas autorisées comme des opérandes dans la condition de la même situation de sélection. ")
est NULL code> est utilisé). p>
sur code>: p>
Regardez comment ma sélection est en ce moment mais ne fonctionne pas encore.
@Alisonvieira Stack Overflow est un forum avec des règles. L'un d'entre eux est de fournir un exemple de reproductible minimal qui n'est actuellement pas le cas: vous ne devez pas copier votre code mais Recréez-en un pour débordement de pile, comme expliqué clairement dans le lien. Veuillez essayer avec le code reproductible que j'ai proposé et vous pouvez le voir résoudre votre question (j'ai également essayé avec votre code, j'ai passé du temps à écrire le code manquant (!!), et cela a fonctionné). NB: Je vais devoir revenir à votre révision de la question (ou un autre utilisateur de puissance le fera).
J'ai résolu mon problème. C'est la Mandt, j'essayais de choisir avec la Mandt
On (Aufk ~ Mandt EQ AFIH ~ MANDT et AUFK ~ AUFNR EQ AFIH ~ AUFNR) CODE>
Mais ce n'est pas nécessaire. J'ai changé pour
sur (aufk ~ aufnr eq afih ~ aufnr) code> p>
Cela ne fonctionne pas. Lorsque je change de «join gauche» par «Join Inner», cela fonctionne. Est-ce que tu sais pourquoi ?
: Cloud vous veuillez décrire (1) ce que vous attendez, (2) dans quelle distance le résultat réel diffère de vos attentes et (3) modifier votre code, de sorte qu'il s'agit d'un exemple fonctionnel et minimal, y compris des définitions de toutes les variables hôtes. vous avez utilisé? Au fait: la colonne
Mandt code> est automatiquement comparée lorsque vous rejoignez les tables de la dépendance du client.
Vous ne pouvez utiliser qu'une jointure externe dans une déclaration de sélection en même temps. 'Left Join est une jointure extérieure, vous ne pouvez donc l'utiliser qu'une fois
J'ai édité la question de sorte qu'il s'agisse d'un exemple de reproductible minimal
Le message (non clairs) est due au fait que votre code ABAP SQL a une fonctionnalité qui ne peut fonctionner que avec le mode strict (nécessite des virgules, @ devant les variables ABAP, etc.). La fonctionnalité concernée est le filtrage sur une colonne d'une table "de gauche" (je pense que c'est depuis 7.40 SP05 , uniquement en mode strict).
Arrêtez d'écrire
eq code>. Ce n'est plus fortran ou cobol. Utilisez
= code>.
@ Lougxis, j'ai essayé d'utiliser une jointure à gauche et je n'ai pas fonctionné.
@Jagger Offtopic: Je préfère
EQ code> sur
= code> dans ABAP pour distinguer clairement entre les missions et les comparaisons. Si ABAP avait un
== code> J'utiliserais cela bien sûr.
Quelle est votre version Abap?
@Sandrarossi, NW 7.4
@konstantin désolé, mais c'est le cas de 1960. Vous pouvez voir clairement des comparaisons dans Abap car elles commencent par
si code> et il n'y a absolument aucun moyen de faire une affectation après un
si code> in abap .