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

Requêtes MySQL Discussion :

Filtre complex SQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut Filtre complex SQL
    Bonjour,

    J'aurais besoin de votre aide sur une formule SQL que je n'arrive pas à résoudre.

    voici un exemple de ce que je voudrais transcrire en SQL:

    EX:

    NOM ETAT
    ARTICLE1 OPEN => Ne pas afficher
    ARTICLE2 CLOS => AFFICHER
    Jusque la tout vas bien mais en rajoutant le critère ci dessous ça coince !
    ARTICLE3 CLOS
    ARTICLE3 OPEN => Ne pas afficher car l'article3 contient un enregistrement = à OPEN même si il y à X enregitrement = à CLOS

    En conclution

    si l'article est égale à CLOS afficher
    si l'article est égale à OPEN ne pas afficher
    Et si l'article est égale à CLOS mais si etat est aussi égal à OPEN ne pas afficher

    Merci de votre aide

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonsoir,
    je ne comprends pas très bien votre histoire d'enregistrement et d'article.

    Pourriez-vous m'afficher la structure de la table et une dizaine de ligne a comparer.

    Je m'y pencherais durant la soirée.

    Cordialement,
    DaRiaN.

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Par une sous-requête avec le mot-clef NOT IN, c'est faisable. Mais si votre version de MySQL est antérieure à la 4.1, voici une autre requête sans sous-requête qui fait la même chose (et est donc plus performante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t1.nom
    from matable t1
    left join matable t2 on t1.nom = t2.nom and t2.etat = 'OPEN'
    where t2.nom is null
    C'est une auto-jointure sur la table (que j'ai appelé ici "matable", super original ), en ne gardant que les lignes avec un état à OPEN.
    Dans le where, on ne garde que les lignes qui n'ont pas de correspondance dans la jointure (IS NULL), donc toutes les lignes pour lesquelles il n'y a pas d'article avec un état OPEN. Et le tour est joué

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    Par une sous-requête avec le mot-clef NOT IN, c'est faisable. Mais si votre version de MySQL est antérieure à la 4.1, voici une autre requête sans sous-requête qui fait la même chose (et est donc plus performante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t1.nom
    from matable t1
    left join matable t2 on t1.nom = t2.nom and t2.etat = 'OPEN'
    where t2.nom is null
    C'est une auto-jointure sur la table (que j'ai appelé ici "matable", super original ), en ne gardant que les lignes avec un état à OPEN.
    Dans le where, on ne garde que les lignes qui n'ont pas de correspondance dans la jointure (IS NULL), donc toutes les lignes pour lesquelles il n'y a pas d'article avec un état OPEN. Et le tour est joué

    ced
    Comment te dire un énorme MERCI tu à trouver ce que je cherchais depuis 3 jours, je suis a la fois content que ça marche et un peu frustré je l'avous de ne pas avoir trouver. Encore une fois merci

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

Discussions similaires

  1. Filtre requete SQL
    Par zizou771 dans le forum SQL
    Réponses: 1
    Dernier message: 26/12/2007, 16h18
  2. Problème filtre complexe
    Par amanyth dans le forum Deski
    Réponses: 23
    Dernier message: 22/10/2007, 15h37
  3. requete complexe sql server
    Par adil_math2006 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 14/06/2007, 10h39
  4. [DeskI V5-V6] Filtre complexe
    Par marion782 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/11/2006, 14h12
  5. Expression de filtre complexe
    Par mfofana dans le forum Access
    Réponses: 6
    Dernier message: 09/01/2006, 19h48

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