Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 28/01/2011, 15h54   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 0
Points : 0
Par défaut Exclure des champs à zéro

Bonjour,
J'ai une requête sur une table de fait avec plusieurs jointures sur des tables de référentiel qui me renvoie x lignes dont certaines ont tous leurs champs égaux à la valeur 0.
Je souhaiterais exclure de mon résultat ces faits et ne conserver que ceux pour lesquels il y a au moins un des champs différent de 0.

J'ai essayé la fonction MINUS

avec requête

minus

requête
and champ1=0 and champ2=0 and champ3=0 etc ...

avez-vous une solution ?
merci de votre aide
fbtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h03   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,


Code sql :
1
2
3
4
5
6
 
WHERE
	Colonne1 <> 0
	OR Colonne2 <> 0
	OR Colonne3 <> 0
	...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h07   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 0
Points : 0
Merci aieeeuuuuu

mais la requête s'avère très longue en éxécution.
il n'y a pas moyen de la découper afin d'optimiser les performances ?

Merci par avance
fbtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h18   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
En l'absence de la DDL de ta table, des index dont elle dispose et de la requete que tu as écrite, je t'ai proposé une solution "générique"

Avec plus d'informations, on pourrait effectivement prévoir quelque chose de plus optimisé...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h53   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 0
Points : 0
OK ça me semble compliqué de te donner tout le détail.
Peux-tu me dire si la 1ère solution envisagée te paraît correcte ?
merci encore pour ton aide
fbtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h59   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par fbtur Voir le message
OK ça me semble compliqué de te donner tout le détail.
Pourquoi ça ?

Donne nous le résultat de SHOW CREATE TABLE la_table sur chaque table concernée par la requête.
__________________
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
Vieux 28/01/2011, 17h08   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par CinePhil Voir le message
Pourquoi ça ?

Donne nous le résultat de SHOW CREATE TABLE la_table sur chaque table concernée par la requête.
oui, et surtout la requete en elle même (pour pouvoir l'optimiser, c'est mieux de l'avoir !)

...
car j'ai lancé
Code ??? :
1
2
 
requête AND champ1=0 AND champ2=0 AND champ3=0

sur mon système, il me dit qu'il y a une erreur de syntaxe
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 17h10   #8
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
on peut aussi utiliser un UNION

Code :
1
2
3
4
5
6
7
8
9
10
11
 
SELECT ...
..
WHERE Col1 <> 0
UNION
SELECT ...
..
WHERE Col2 <> 0
SELECT ...
..
WHERE Col3 <> 0
mais s'il n'y a pas d'index ...
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 17h32   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Attention, il ne s'agit pas ici de vérifier une égalité, mais une inégalité !

une série d'union sera donc sans doute contre-performant : une ligne n'aura aucune valeur à 0 sera candidate à toutes les requêtes, et devra être dédoublée ensuite !

Enfin comme tu dis, s'il n'y a pas d'index de toute façon...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 11h38   #10
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Citation:
Envoyé par aieeeuuuuu Voir le message
Attention, il ne s'agit pas ici de vérifier une égalité, mais une inégalité !

une série d'union sera donc sans doute contre-performant : une ligne n'aura aucune valeur à 0 sera candidate à toutes les requêtes, et devra être dédoublée ensuite !

comme quoi il vaut mieux reflechir 2 fois avant d'ecrire quoique ce soit


mais un peu plus d'infos seraient le bienvenu...
dehorter olivier 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 03h52.


 
 
 
 
Partenaires

Hébergement Web