IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Select multi critères


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Select multi critères
    Bonjour,

    Mon problem : Je dispose d'une table VIS qui se constitue ainsi : VIS {Type,DIAMETRE,REFERENCEVIS[clé primaire],DESIGNATION,PREF,LGTOTAL,LGTOTALMIN,LGTOTALMAX,FILTAGE,FILETAGEMIN,FILETAGEMAX,FULIS,MIN,MAX,BULLE)

    Je voudrais sélectionner les vis qui ont par exemple un diameter = 'MJ4', LGTOTAL > '10' , LGTOTALMAX < '20', FUTLISSMAX < 5, et une bulle = 'T'.
    Ces valeurs devrait retourner un résultat puisqu'elles correspondent à coup sûr à des vis répondant à ces critères.

    Cependant ma requête retourne des vis qui repondent que partiellement à ces critères, seulement 2 souvent sont pris en compte.

    Ma requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM VIS 
    WHERE VIS.DIAMETRE_NUM = 'MJ3'
    AND VIS.REFERENCEVIS IN (SELECT VIS.REFERENCEVIS 
                                                  FROM VIS
                                                  WHERE VIS.BULLE = 'T'
                                                  AND VIS.LGFULISMAX < '1,1'
                                                  AND VIS.LGTOLMIN > '4'
                                                  AND VIS.LGTOMAX < '5,5' )
    J'ai aussi essayer de placer chaque critères dans une sous requête mais meme bilan.
    Merci d'avance.
    Bonne journée.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 870
    Points
    12 870
    Par défaut
    Bonjour,
    Question bête: pourquoi utilises-tu une sous-requête ? Tu peux mettre tous les critères dans une seule requête.
    Quoi qu'il en soit, je ne vois pas pourquoi ta requête ne fonctionne pas (à part le fait que l'exemple donné ne colle pas à sa description).
    Est-ce que tu peux nous montrer un jeu de test et le résultat que renvoie la requête ?

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour, je viens d'executer cette requête là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT * 
    FROM VIS 
    WHERE VIS.DIAMETRE_NUM = 'MJ3'
    AND VIS.BULLE = 'T'
    AND VIS.LGFULISMAX < '1,1'
    AND VIS.LGTOLMIN > '4'
    AND VIS.LGTOMAX < '5,5'
    Mon jeu d'essais en sorti est :
    TYPE DIAMETRE_NUM REFERENCEVIS DESIGNATION PREF LGTOTAL LGTOLMIN LGTOMAX LGFILETAGE LGFILETAGEMIN LGFILETAGEMAX LGFULIS LGFULISMIN LGFULISMAX BULLE
    VIS MJ3 F844302-001 SCR-SKT-STD-TI-MJ3 X 5LG N 5 4,7 5,3 4 4,2 4,3 1 0,5 1 T
    VIS MJ3 F844307-001 SCR-SKT-STD-TI-MJ3 X 10LG N 10 9,7 10,3 9 9,2 9,3 1 0,5 1 T

    La deuxieme vis etant fausse

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    On vous a demandé la description de votre table sous forme DDL. Merci d'obéir aux demandes et de respecter la charte de postage !
    http://www.developpez.net/forums/a69...gage-sql-lire/
    Sans cela il est impossible de vous aider !

    De toute façon votre modélisation de table est pourrie, raison pour laquelle vos résultats sont faux et le seront toujours.

    En effet une comparaison logique sur un littéral n'a rien à voir avec une comparaison logique sur des numériques.

    Revoyez votre modèle et tout rentrera dans l'ordre...

    Une base de données, c'est pas un tableur excel !!!

    A +

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 870
    Points
    12 870
    Par défaut
    La liste des colonnes ne correspond pas à la liste de valeur (15 colonnes pour 17 valeurs), il est donc difficile de voir ce qui ne va pas.

    Tatayo.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous stockez des nombres dans des chaines de caractère. Du coup, vous ne comparez pas des nombres, mais des chaines de caractères ! Et comme 1 est avant 5, 10 est avant 5 également (de la même manière que 'AZ' est classé avant 'B')!

    En effet, 10,3>5,5 mais '10,3'<'5,5', ce qui explique votre résultat.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 300
    Points : 39 641
    Points
    39 641
    Billets dans le blog
    9
    Par défaut
    A peu près tout a été dit, j'ajoute simplement
    - évitez les colonnes char comme clef primaire, préférez des types integer (small ou big si besoin), vos performances seront bien meilleures
    - évitez les select *, à remplacer par la liste des colonnes utiles à votre traitement, là aussi, vos performances seront meilleures, mais surtout, votre résultat sera stable quelque soient les évolutions de votre base de données

Discussions similaires

  1. SELECT multi-critères avec condition absolue
    Par wedz79 dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/04/2014, 12h52
  2. Requête 3 tables - group by - select multi critères
    Par julienleg dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/06/2010, 11h04
  3. Requête Select Top et Order by multi-critères en même temps.
    Par Courgette17 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/03/2008, 10h51
  4. Select multi critères
    Par Nicolas Carron dans le forum Langage SQL
    Réponses: 0
    Dernier message: 11/12/2007, 15h59
  5. Recherche multi selection (et non multi critére)
    Par ange_dragon dans le forum Modélisation
    Réponses: 12
    Dernier message: 29/05/2007, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo