IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Utiliser dans WHERE une zone définie par AS


Sujet :

DB2

  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut Utiliser dans WHERE une zone définie par AS
    Bonjour à tous

    Impossible d'exécuter la clause SQL suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Substr(ARTSGP , 1 , 2) as SQLSG1 FROM sxfart 
    WHERE SQLSG1 <= 'XX' and SQLSG1 > 'AB'
    J'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'La colonne SQLSG1 ne se trouve pas dans les tables indiquées'
    Est-ce que c'est uniquement un problème de syntaxe ou est-ce que je suis obligé de faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Substr(ARTSGP , 1 , 2) FROM sxfart 
    WHERE Substr(ARTSGP , 1 , 2) <= 'XX' and Substr(ARTSGP , 1 , 2)  'AB'

    Merci!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    c'est un problème de syntaxe.

    Les alias dans une requête sql sont construit à la fin de la requête (j'ai un doute la dessus par rapport aux order by, donc avant dernière ou dernière position pour la création des alias de la clause select).

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut
    Bonjour, merci pour la réponse.

    Je n'ai donc pas d'autre choix (à part un BETWEEN mais là n'est pas la question) que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Substr(ARTSGP , 1 , 2) FROM sxfart 
    WHERE Substr(ARTSGP , 1 , 2) <= 'XX' AND Substr(ARTSGP , 1 , 2)  > 'AB'
    ?

  4. #4
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Par défaut
    Bonjour,

    En passant par une nested table, tu peux écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SQLSG1 FROM (
    SELECT Substr(ARTSGP , 1 , 2) AS SQLSG1 FROM sxfart ) AS T 
    WHERE SQLSG1 <= 'XX' AND SQLSG1 > 'AB'
    A ta disposition.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 42
    Par défaut
    Bonjour,

    la variante de la neested table, la CTE (Common Table Expression) qui permet en plus de faire de la référence imbriquée sur les vues logiques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WITH T (SQLSG1) AS 
    (SELECT Substr(ARTSGP , 1 , 2) FROM sxfart ) 
    SELECT SQLSG1 FROM T WHERE SQLSG1 <= 'XX' AND SQLSG1 > 'AB'

  6. #6
    Membre averti
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut
    Merci à tous les deux.

    C'est intéressant. Je me pose des questions sur les temps de réponses...

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Chez moi le plan d'execution est le même pour les 3 syntaxes (V5R4)

    Pour les perf il vous faut un index sur votre colonne ARTSGP.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 42
    Par défaut
    La CTE n'est ni plus ni moins que la définition d'une vue logique. Si le prédicat utilise l'index je ne pense pas qu'il y ait dégradation des performances. Le problème peut venir des fonctions que l'on intègre dans ce type de vue (GROUP BY, DISTINCT, SUBSTR, MAX, MIN...)

  9. #9
    Membre averti
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut
    Merci pour ces précisions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/02/2009, 22h49
  2. Réponses: 1
    Dernier message: 22/08/2008, 10h06
  3. Charger du texte dans une zone définie (css? php? html?)
    Par dahu17 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/08/2007, 13h14
  4. afficher du powerpoint dans une zone définie
    Par Into7 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/07/2007, 14h33
  5. [vb]position du curseur dans une zone définie
    Par maxdwarf dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/02/2007, 06h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo