Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2942 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] condition sur un alias

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] condition sur un alias

n°1730784
bastok
Posté le 12-05-2008 à 06:13:11  profilanswer
 

Bonjour,
 
Je me trouve confronté à un problème avec MySQL 5.0.51b-community-ntqui qui apparemment a été abordé plusieurs fois, mais je n'ai pas trouvé de réponse satisfaisante.
Voici mon problème :
 
Imaginons deux tables :
 
EMPLOYES      SALAIRES
----------      --------
ID_EMPLOYE   ID_SALAIRE
NOM              ID_EMPLOYE
                    SALAIRE
 
dans la table employé on trouve :
 
1 DUPONT
2 DURAND
 
et dans la table salaires :
 
1 2 1500
 
maintenant j'execute la requete suivante :
 

Code :
  1. SELECT
  2. e.nom, s.salaire AS 'salaire en euros'
  3. FROM
  4. employes e
  5. LEFT OUTER JOIN salaires s
  6. ON s.id_employe = e.id_employe
  7. GROUP BY e.id_employe
  8. HAVING 'salaire en euros' > 100


 
La requête va me sortir aucun résultat. Si par contre je met entre quote '100' à ce moment là ca me sort tous les résultats.
Je suis obligé de passer par un GROUP BY, d'après le manuel de MySQL 5, il est impossible de faire un WHERE sur un alias, il faut à la place utiliser HAVING.
 
Je suis bien embêté car je fais un système un peu dynamique en PHP, et j'ai besoin de mettre un alias aux colonnes, et je suis surtout obligé d'utiliser le nom de colonne renvoyé par MySQL et le réutiliser dans le HAVING.
 
Si quelqu'un a une slution ultime, je suis preneur.
Merci

mood
Publicité
Posté le 12-05-2008 à 06:13:11  profilanswer
 

n°1730798
moi23372
Posté le 12-05-2008 à 10:38:37  profilanswer
 

SELECT *
FROM  
(
SELECT e.nom, s.salaire AS 'salaire en euros'
FROM employes e LEFT OUTER JOIN salaires s ON s.id_employe = e.id_employe
) as Result
WHERE 'salaire en euros' > 100;
 
ou si plusieurs lignes dans SALAIRE pour un employé
 
SELECT *
FROM  
(
SELECT e.nom, sum(s.salaire) AS 'salaire en euros'
FROM employes e LEFT OUTER JOIN salaires s ON s.id_employe = e.id_employe
GROUP BY e.nom
) as Result
WHERE 'salaire en euros' > 100;
 
Je ne sais pas si ça marche avec MySQL. En tout cas, ça marche avec ORACLE et SQL SERVER.


Message édité par moi23372 le 12-05-2008 à 10:40:45
n°1730799
sielfried
Posté le 12-05-2008 à 10:39:47  profilanswer
 

Euuuh, pourquoi tu fais un group by, là, concrètement ? [:petrus75]
 

Code :
  1. SELECT e.nom, s.salaire AS salaire_en_euros
  2. FROM employes e
  3. LEFT OUTER JOIN salaires s ON s.id_employe = e.id_employe
  4. WHERE salaire_en_euros > 100


 
[:autobot]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1730835
bastok
Posté le 12-05-2008 à 13:38:12  profilanswer
 

sielfried a écrit :

Euuuh, pourquoi tu fais un group by, là, concrètement ? [:petrus75]
 

Code :
  1. SELECT e.nom, s.salaire AS salaire_en_euros
  2. FROM employes e
  3. LEFT OUTER JOIN salaires s ON s.id_employe = e.id_employe
  4. WHERE salaire_en_euros > 100


 
[:autobot]


 

bastok a écrit :


Je suis obligé de passer par un GROUP BY, d'après le manuel de MySQL 5, il est impossible de faire un WHERE sur un alias, il faut à la place utiliser HAVING.


 
Et pour utiliser HAVING, faut un GROUP BY

n°1730857
sielfried
Posté le 12-05-2008 à 14:47:05  profilanswer
 

Non, en MySQL ce n'est pas du tout obligatoire (edit: à partir de MySQL 5.0.2 pour avoir vérifié, donc bon pour toi.)
 
Et sinon suffit de faire ta condition directement sur s.salaire ? [:petrus75]
 
(À moins que t'ais simplifié la chose pour l'exemple, et que ce soit en fait une donnée calculée. Dans ce cas HAVING marche très bien.)


Message édité par sielfried le 12-05-2008 à 14:49:47

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1730858
KangOl
Profil : pointeur
Posté le 12-05-2008 à 14:47:40  profilanswer
 

Code :
  1. SELECT e.nom, s.salaire AS salaire_en_euros
  2.     FROM employes e
  3.     LEFT OUTER JOIN salaires s ON s.id_employe = e.id_employe
  4.     WHERE s.salaire > 100


 
pas la peine d'utiliser ton alias dans le filtre ...

n°1731097
Paulp
~, sweet ~
Posté le 13-05-2008 à 10:43:11  profilanswer
 

bastok a écrit :


Code :
  1. SELECT
  2. e.nom, s.salaire AS 'salaire en euros'
  3. FROM
  4. employes e
  5. LEFT OUTER JOIN salaires s
  6. ON s.id_employe = e.id_employe
  7. GROUP BY e.id_employe
  8. HAVING 'salaire en euros' > 100



100 => le nombre 100
'100' => la chaîne de caractères 100
'salaire en euros' => la chaîne de caractères 'salaire en euros'
"salaire en euros" => l'alias pour un nombre


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] condition sur un alias

 

Sujets relatifs
[Java - Mysql] JComboBox imbriquées - données venant de Bd accessTable Mysql crashée
Changement de password de Mysql . . .WAMP & MySQL
Exporter base mysql vers phpmyadmin[Java/MySQL] interrogation bdd
fermer connexion MySQL[ Mysql ] SHOW DATABASES + REGEXP
Requête MySQL en attente de résultat[Resolu] Création de rapport rdlc à partir d'une base de donnée MySql
Plus de sujets relatifs à : [MySQL] condition sur un alias


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)