Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 31/01/2012, 16h28   #1
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 180
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 180
Points : 28
Points : 28
Par défaut UNION ALL Requête

Bonjour,

J'ai un soucis de trie avec mon UNION ALL

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Erreur SQL !
SELECT pays.pays,indicateur.indicateur,periodicite.periodicite,source.source,description1.description1,description2.description2,DATE_FORMAT(dates,'%m/%d/%Y') ,donnee 
FROM donnees,pays,indicateur,source,periodicite,description1,description2 
WHERE pays.ID_pays = donnees.ID_pays 
AND indicateur.ID_indicateur = donnees.ID_indicateur 
AND periodicite.ID_periodicite = donnees.ID_periodicite AND source.ID_source = donnees.ID_source 
AND description1.ID_description1 = donnees.ID_description1 
AND description2.ID_description2 = donnees.ID_description2 
AND `pays` = "Allemagne" 
AND `indicateur` = "Croissance du PIB " 
AND `periodicite` = "quarter" AND `source` = "source Destatis"
AND `description1` = "variation annuelle en pourcentage" AND dates BETWEEN '2007-01-01'
AND '2020-01-01' 
UNION ALL SELECT pays.pays,indicateur.indicateur,periodicite.periodicite,source.source,description1.description1,description2.description2,DATE_FORMAT(dates,'%m/%d/%Y') ,donnee 
FROM donnees,pays,indicateur,source,periodicite,description1,description2 
WHERE pays.ID_pays = donnees.ID_pays 
AND indicateur.ID_indicateur = donnees.ID_indicateur 
AND periodicite.ID_periodicite = donnees.ID_periodicite 
AND source.ID_source = donnees.ID_source 
AND description1.ID_description1 = donnees.ID_description1
AND description2.ID_description2 = donnees.ID_description2 
AND `pays` = "Allemagne" AND `indicateur` = "Croissance du PIB " AND `periodicite` = "quarter" 
AND `source` = "source Destatis" 
AND `description1` = "variation trimestrielle en pourcentage" 
AND dates 
BETWEEN '2007-01-01' 
AND '2020-01-01' 
ORDER BY pays, indicateur, periodicite, description1, description2, dates ASC
Unknown column 'dates' in 'order clause'

C'est surement du a mon FORMAT_DATE ....
tidou95220 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 16h47   #2
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 180
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 180
Points : 28
Points : 28
Enfin ^^ c'est bien le format_date il faut changer de nom pour l'ALIAS

http://www.geeksww.com/tutorials/dat...d_order_by.php

Cool
tidou95220 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h41   #3
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 180
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 180
Points : 28
Points : 28
Non ça marche pas
tidou95220 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h45   #4
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 180
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 180
Points : 28
Points : 28
Code :
1
2
3
SELECT pays.pays,indicateur.indicateur,periodicite.periodicite,source.source,description1.description1,description2.description2,DATE_FORMAT(dates,'%m/%d/%Y') AS dates ,donnee FROM donnees,pays,indicateur,source,periodicite,description1,description2 WHERE pays.ID_pays = donnees.ID_pays AND indicateur.ID_indicateur = donnees.ID_indicateur AND periodicite.ID_periodicite = donnees.ID_periodicite AND source.ID_source = donnees.ID_source AND description1.ID_description1 = donnees.ID_description1 AND description2.ID_description2 = donnees.ID_description2 AND `pays` = "Allemagne" AND `indicateur` = "Croissance du PIB " AND `periodicite` = "quarter" AND `source` = "source Destatis" AND `description1` = "variation trimestrielle en pourcentage" AND dates BETWEEN '2007-01-01' AND '2020-01-01' 
UNION ALL 
SELECT pays.pays,indicateur.indicateur,periodicite.periodicite,source.source,description1.description1,description2.description2,DATE_FORMAT(dates,'%m/%d/%Y') AS dates ,donnee FROM donnees,pays,indicateur,source,periodicite,description1,description2 WHERE pays.ID_pays = donnees.ID_pays AND indicateur.ID_indicateur = donnees.ID_indicateur AND periodicite.ID_periodicite = donnees.ID_periodicite AND source.ID_source = donnees.ID_source AND description1.ID_description1 = donnees.ID_description1 AND description2.ID_description2 = donnees.ID_description2 AND `pays` = "Allemagne" AND `indicateur` = "Croissance du PIB " AND `periodicite` = "quarter" AND `source` = "source Destatis" AND `description1` = "variation trimestrielle en pourcentage" AND dates BETWEEN '2007-01-01' AND '2020-01-01' ORDER BY pays, indicateur, periodicite, description1, description2, donnees.dates ASC
#1054 - Unknown column 'donnees.dates' in 'order clause'
tidou95220 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h52   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Une bonne révision en SQL serait utile !

1) Avec des alias et correctement indentée et aérée, une requête est plus agréable à lire.

2) Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN. Ça fait quand même 20 ans !

3) Inutile d'entourer les noms de colonnes et de tables avec des apostrophes inversées lorsqu'ils ne sont pas d'une forme pouvant poser problème.

4) Les valeurs textuelles s'entourent d'apostrophes, pas de guillemets.

5) Pourquoi faire un UNION ALL alors qu'il me semble qu'un IN suffirait à ramener toutes les données voulues ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT p.pays,
	i.indicateur,
	pr.periodicite,
	s.source,
	description1.description1,
	description2.description2,
	DATE_FORMAT(dates,'%m/%d/%Y'), -- ajouter un alias et dates vient de quelle table ?
	donnee -- vient de quelle table ?
FROM donnees d
INNER JOIN pays p ON p.ID_pays = d.ID_pays
INNER JOIN indicateur i ON i.ID_indicateur = d.ID_indicateur
INNER JOIN source s ON s.ID_source = d.ID_source
INNER JOIN periodicite pr ON p.ID_periodicite = d.ID_periodicite
INNER JOIN description1 d1 ON d1.ID_description1 = d.ID_description1
INNER JOIN description2 d2 ON d2.ID_description2 = d.ID_description2 
WHERE p.pays = 'Allemagne'
	AND i.indicateur = 'Croissance du PIB'
	AND pr.periodicite = 'quarter' 
	AND s.source = 'source Destatis'
	AND d1.description1 IN ('variation annuelle en pourcentage', 'variation trimestrielle en pourcentage')  
	AND dates BETWEEN '2007-01-01' AND '2020-01-01' -- de quelle table vient la colonne dates ?
ORDER BY p.pays, i.indicateur, pr.periodicite, d1.description1, d2.description2, dates -- de quelle table provient dates ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h22.


 
 
 
 
Partenaires

Hébergement Web