Requete SQL

nlk_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
nlk_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un soucis avec une requête SQL pour mon stage, j'explique:

J'ai deux tables, une table mesure et une table moyenne (contenant les moyennes des mesures de la table mesure ). Les mesures s'effectuent sur des stations (il s'agit de mesures d'envrionnement acoustique). Ce qui veut dire qu'il y a plusieurs indices de mesure, donc une mesure (identifiée par un ID) contient plusieurs données pour les différents indices de mesure.

J'essaye d'afficher les mesures qui seraient aberrantes; dans mon cas, ce sont celles où la DIFFERENCE entre la mesure et la moyenne est inférieure à -7 ou supérieure à 7; En gros, si l'écart est de plus de 7 entre les données de la mesure et celles de la moyenne, la donnée est considérée comme incorrecte.

Voilà la requête que j'ai fait:

SELECT mesures.`ID` FROM mesures, moyennes
WHERE (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) >7
OR (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) < -7


(LAeq 24H est un indice de mesure, ici pour donner un exemple)
Cette requête me renvoie environ 40 000 enregistrements alors qu'il n'y en a que 1 280 dans la base! Et plus bizarre encore, elle affiche plusieurs fois d'affilée le même identifiant de mesure, par exemple:

ID
1
1
1

...

2
2
2
...

Le problème c'est qu'il n'y a aucune clé étrangère dans les tables mesures et moyennes, devrais-je penser à modifier la base (je travaille dessus en local pour l'instant)?

Merci pour l'aide, si vous ne comprenez pas qque chose n'hésitez pas.

à bientot!

3 réponses

jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
Ben sinon tu mets un distinct :
SELECT DISTINCT(mesures.`ID`) FROM mesures, moyennes
WHERE (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) >7
OR (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) < -7

ca ne renverra qu'une seule fois les ID de la table mesure
0
nlk_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la réponse rapide, ça réduit pas mal les données...

.. ça les réduit jusqu'à 1285! soit exactement nombre d'enregistrements de la table :p donc je pense que la requête en elle-même est mal construite.

Je vais chercher un peu et la modifier...
0
jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
Heu
je pense que tas oublié de faire une jointure sur l'id entre les 2 tables :

SELECT DISTINCT(mesures.`ID`) FROM mesures, moyennes
WHERE (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) >7
OR (mesures.`LAeq 24H` - moyennes.`LAeq 24H`) < -7 and mesures.`ID`=moyennes.`ID`

(où quelquechose du genre ^^)
0
nlk_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Oui je comprends bien, merci. Mais l'ID de la moyenne ne correspond pas à l'ID de la mesure ! (ça serait trop facile :D)
C'est que j'expliquais dans le début de la discussion: il n'y a pas de relation au sens propre dans cette base de données...

Je pense qu'il faut rajouer un ID quelque part pour faire le lien, mais faut-il rajouter celui de la mesure dans la table moyenne, l'ID de la moyenne dans la table mesure, ou alors créer une table d'association entre les 2 autres, qui comprendrait les deux ID?

Merci de votre aide.
0