0
votes

Les éléments de la liste "Select List" doivent être séparés à l'aide de virgules

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'.


11 commentaires

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 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 . Ce n'est plus fortran ou cobol. Utilisez = .


@ Lougxis, j'ai essayé d'utiliser une jointure à gauche et je n'ai pas fonctionné.


@Jagger Offtopic: Je préfère EQ sur = dans ABAP pour distinguer clairement entre les missions et les comparaisons. Si ABAP avait un == 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 et il n'y a absolument aucun moyen de faire une affectation après un si in abap .


3 Réponses :


5
votes

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'.


0 commentaires

4
votes

Avant de publier 7.40 SP05, vous ne pouvez pas utiliser la clause 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. ")

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 est NULL est utilisé).

Le bon moyen est de définir la condition dans le sur : xxx


2 commentaires

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).



-3
votes

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) Mais ce n'est pas nécessaire. J'ai changé pour sur (aufk ~ aufnr eq afih ~ aufnr)


0 commentaires