Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2011, 22h33   #1
Candidat au titre de Membre du Club
 
Inscription : août 2010
Messages : 48
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : août 2010
Messages : 48
Points : 10
Points : 10
Par défaut Utiliser dans WHERE une zone définie par AS

Bonjour à tous

Impossible d'exécuter la clause SQL suivante :

Code :
1
2
SELECT Substr(ARTSGP , 1 , 2) AS SQLSG1 FROM sxfart 
WHERE SQLSG1 <= 'XX' AND SQLSG1 > 'AB'
J'ai l'erreur :

Code :
'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 :
1
2
SELECT Substr(ARTSGP , 1 , 2) FROM sxfart 
WHERE Substr(ARTSGP , 1 , 2) <= 'XX' AND Substr(ARTSGP , 1 , 2)  'AB'

Merci!!
stupido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 23h23   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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).
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 00h13   #3
Candidat au titre de Membre du Club
 
Inscription : août 2010
Messages : 48
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : août 2010
Messages : 48
Points : 10
Points : 10
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 :
1
2
SELECT Substr(ARTSGP , 1 , 2) FROM sxfart 
WHERE Substr(ARTSGP , 1 , 2) <= 'XX' AND Substr(ARTSGP , 1 , 2)  > 'AB'
?
stupido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 08h39   #4
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
Bonjour,

En passant par une nested table, tu peux écrire

Code :
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.
pdz74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 17h02   #5
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2008
Messages : 42
Points : 35
Points : 35
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 :
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'
battistuta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 04h39   #6
Candidat au titre de Membre du Club
 
Inscription : août 2010
Messages : 48
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : août 2010
Messages : 48
Points : 10
Points : 10
Merci à tous les deux.

C'est intéressant. Je me pose des questions sur les temps de réponses...
stupido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 09h29   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 09h57   #8
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2008
Messages : 42
Points : 35
Points : 35
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...)
battistuta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 18h22   #9
Candidat au titre de Membre du Club
 
Inscription : août 2010
Messages : 48
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : août 2010
Messages : 48
Points : 10
Points : 10
Merci pour ces précisions.
stupido est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h36.


 
 
 
 
Partenaires

Hébergement Web