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 :

[MySQL] Probleme avec différents critères (OR, AND)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut [MySQL] Probleme avec différents critères (OR, AND)
    Bonjour,

    J'ai un problème avec une requete, je n'arrive pas à sortir les résultats voulus.
    Dans ma table, j'ai 3 colonnes :
    Etat - ValFact - MoisFact

    Chaques colonnes à plusieurs valeurs possibles prédéfinies dans un formulaire.


    J'aimerais sortir les lignes qui ne remplissent pas les critères suivant en mème temps :
    - L'état ne doit pas être à "Termine"
    - ValFact ne doit être à "Oui"
    - MoisFAct doit être vide

    j'ai fais cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *
    FROM ma_table 
    WHERE (valfact <> 'Oui') 
    OR (etat <> 'Termine') 
    AND moisfact IS NULL;
    Mais cela ne renvois rien.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM   ma_table 
    WHERE  etat <> 'Termine' -- L'état ne doit pas être à "Termine"
      AND  valfact <> 'Oui'  -- ValFact ne doit être à "Oui" 
      AND  moisfact IS NULL  -- MoisFAct doit être vide
    Cerveau embrumé ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Cela ne fonctionne pas. J'ai oublié de précisé que 'Etat' peut être à 'Termine' et 'ValFact' à 'Non' ou 'Etat' peut être à 'En cours' (par exemple) et 'ValFAct' à 'Oui'.
    Il faut juste que la colonne 'MoisFact' soit absolument vide et que les colonnes 'Etat' et 'Valfact' n'aient pas les valeurs 'Termine' et 'Oui' en mème temps.

    Les différents cas recherchés sont donc :

    etat : Termine
    valfact : Non
    MoisFact : "vide"

    etat : En cours
    valFact : Oui
    moisfact : "vide"

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Salut,
    Tu n'as pas précisé ton SGBD, sous oracle on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM   ma_table
    WHERE moisfact IS NULL
    and (etat, valfact) <> (select 'Termine','Oui' from dual)
    Je pense que ça correspond à ce que tu veux, mais la syntaxe est sûrement à adapter en fonction du SGBD.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Mon SGBD est MySQL

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Dans ta requête de départ, fais attention aux priorités logiques :

    A OR B AND C, ça se lit : A OR (B AND C)

    Si tu veux que ce soit différent, écris explicitement (A OR B) AND C

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Méthode pour faire barbar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT * 
    FROM   
               ma_table 
    WHERE  
               (etat <> 'Termine' -- L'état ne doit pas être à "Termine"
      AND  valfact <> 'Non'  -- ValFact ne doit être à "Non" 
      AND  moisfact IS NULL)  -- MoisFAct doit être vide
     
    OR
                (etat <> 'En cours' -- L'état ne doit pas être à "En cours"
      AND  valfact <> 'Oui'  -- ValFact ne doit être à "Oui" 
      AND  moisfact IS NULL)  -- MoisFAct doit être vide
    [Edit] : Grilled !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/05/2006, 23h18
  2. [MySQL] Probleme avec LENGHT
    Par guy2004 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/04/2006, 14h16
  3. MySQL - Probleme avec 2 index sur une table
    Par xG-Hannibal dans le forum Outils
    Réponses: 7
    Dernier message: 31/03/2006, 14h08
  4. [MySQL] Problème avec checkbox
    Par iomega dans le forum Requêtes
    Réponses: 11
    Dernier message: 24/01/2006, 15h37
  5. [MySQL] Problème avec une liste déroulante
    Par leloup84 dans le forum SQL Procédural
    Réponses: 19
    Dernier message: 24/01/2006, 12h57

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