Problème d'alias sur table dérivée (sous-requête)

dthuler Messages postés 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 avril 2009 - 20 avril 2009 à 11:32
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 20 avril 2009 à 14:06
Bonjour,
J'ai un gros problème que je n'arrive pas à isoler dans une requête MySQL;
La requête suivante me donne l'erreur "Every derived table must have its own alias" sur MySQL 4.2 et je vois vraiment pas d'où ça peut venir... Attention les yeux:

SELECT
   Month,
   departments.ShortName AS Department,
   GLOBEID,
   FirstName,
   LastName,
   SUM(Actual) AS Actual,
   SUM(Planned) AS Planned
FROM users
LEFT JOIN
(
   (
      SELECT
         SUM(Hours) AS Actual,
         NULL AS Planned,
         users.ID AS PplID,
         EffectiveMonth AS Month
      FROM pshours
      LEFT JOIN users ON pshours.GlobeID = users.GLOBEID      WHERE Network 'RDOR100119' AND EffectiveYear 2009
      GROUP BY PplID, Month
   )
   UNION
   (
      SELECT
         NULL AS Actual,
         SUM(Hours) AS Planned,
         PplID,
         Month AS Month
      FROM newassignement      WHERE ProjectID 68 AND Year 2009
      GROUP BY PplID, Month
   )
) AS ActualxPlan_Table ON users.ID = PplID
LEFT JOIN departments ON users.DptID = departments.ID
WHERE (Actual IS NOT NULL OR Planned IS NOT NULL)
GROUP BY Month, GLOBEID ORDER BY DptID, LastName, FirstName

Quelqu'un peut m'aider ?
Merci d'avance à l'âme charitable qui m'aidera...
David
A voir également:

3 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
20 avril 2009 à 12:07
bonjour

en voyant le message d'erreur, je me dis qu'il faut surement que tu rajoute un alias pour chacune de tes sous requetes de ton premier "LEFT JOIN" soit quelque chose comme ca :

SELECT
   Month,
   departments.ShortName AS Department,
   GLOBEID,
   FirstName,
   LastName,
   SUM(Actual) AS Actual,
   SUM(Planned) AS Planned
FROM users
LEFT JOIN
(
   (
      SELECT
         SUM(Hours) AS Actual,
         NULL AS Planned,
         users.ID AS PplID,
         EffectiveMonth AS Month
      FROM pshours
      LEFT JOIN users ON pshours.GlobeID = users.GLOBEID      WHERE Network 'RDOR100119' AND EffectiveYear 2009
      GROUP BY PplID, Month
   ) AS Table1
   UNION
   (
      SELECT
         NULL AS Actual,
         SUM(Hours) AS Planned,
         PplID,
         Month AS Month
      FROM newassignement      WHERE ProjectID 68 AND Year 2009
      GROUP BY PplID, Month
   ) AS Table2
) AS ActualxPlan_Table ON users.ID = PplID
LEFT JOIN departments ON users.DptID = departments.ID
WHERE (Actual IS NOT NULL OR Planned IS NOT NULL)
GROUP BY Month, GLOBEID ORDER BY DptID, LastName, FirstName

mais je ne connais pas bien MySQL
0
dthuler Messages postés 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 avril 2009
20 avril 2009 à 13:45
J'ai déjà essayé et en faisant ça, j'obtient carrément une erreur de syntaxe avant le "UNION"...
Une idée ? J'ai sérieusement essayé avant mais je ne trouve pas encore le "bug"...
David
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
20 avril 2009 à 14:06
hmmm

je ne connais pas tres bien mySQL, mais avez vous essayé de mettre a alias a TOUTES les tables que vous appelez (avec bien sur un alias different pour une table que vous appelez plusieurs fois, comme la table users, appelée dans la requete principale, mais aussi dans les sous requetes... le probléme vient peut etre de la...)
0
Rejoignez-nous