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 :

Afficher aucun enregistrement si condition est vraie


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 65
    Points
    65
    Par défaut Afficher aucun enregistrement si condition est vraie
    Bonjour,

    Je butte actuellement sur quelques requêtes pour faire des tableaux de bord. Je m'en remets donc à vous pour bénéficier de quelques conseils !

    Voici ce que j'aimerais obtenir :

    J'ai deux tables qui concernent les bons de livraisons : blent (pour l'entête) et bllig (pour les lignes...). Je voudrais afficher tous mes BL à partir du 01/10/2010...

    SAUF si une ligne d'un BL donné contient un article commençant par "222", alors je ne veux pas que les données liées à ce BL s'affiche. Du tout, du tout.

    Sauf qu'avec ma petite requête, de façon tout-à-fait normale, il me remonte toutes les lignes des BL sauf celles dont les articles commencent par "222". Le problème c'est que si j'ai un article "toto" et un article "222%", alors il m'affiche la ligne avec "toto". Je ne voudrais pas qu'elle s'affiche. A partir du moment où il y a l'article "222%" dans un BL, je ne veux voir apparaître aucune ligne du BL dans mon état.

    Comment dois-je m'y prendre ? Voici mon humble requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT blent.nobl, blent.dtlivr, blent.ref, bllig.noart, bllig.design, bllig.qte, bllig.prxu
    FROM blent, bllig
    WHERE blent.nobl = bllig.nobl
    AND blent.dtlivr >= '01/10/2010'
    AND bllig.noart NOT LIKE 'SAV%'
    ORDER BY blent.nobl
    J'espère que c'est clair ! Merci d'avance !

    Marie

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Bonjour,

    Il faut dans ce cas utiliser la clause NOT EXISTS de façon à exclure les BL contenant un article avec tel ou tel référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT blent.nobl, blent.dtlivr, blent.ref, bllig.noart, bllig.design, bllig.qte, bllig.prxu
    FROM blent, bllig
    WHERE blent.nobl = bllig.nobl
    AND blent.dtlivr >= '01/10/2010'
    AND NOT EXISTS
      (SELECT 1
      FROM  bllig
      WHERE  blent.nobl = bllig.nobl
      AND  noart NOT LIKE '222%')
    ORDER BY blent.nobl

  3. #3
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Salut,

    J'aurai ajouté une clause NOT EXISTS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT be.nobl, be.dtlivr, be.ref, bl.noart, bl.design, bl.qte, bl.prxu
    FROM blent be, bllig bl
    WHERE be.nobl = bl.nobl
    AND be.dtlivr >= '01/10/2010'
    AND bl.noart NOT LIKE 'SAV%'
    AND NOT EXISTS (
                     SELECT 1 FROM bllig bl2 WHERE bl2.nobl = bl.nobl AND bl2.noart NOT LIKE '222%'
                   )
    ORDER BY be.nobl
    Maintenant il y a peut être une meilleure solution

  4. #4
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Bonjour,

    Il faut dans ce cas utiliser la clause NOT EXISTS de façon à exclure les BL contenant un article avec tel ou tel référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT blent.nobl, blent.dtlivr, blent.ref, bllig.noart, bllig.design, bllig.qte, bllig.prxu
    FROM blent, bllig
    WHERE blent.nobl = bllig.nobl
    AND blent.dtlivr >= '01/10/2010'
    AND NOT EXISTS
      (SELECT 1
      FROM  bllig
      WHERE  blent.nobl = bllig.nobl
      AND  noart NOT LIKE '222%')
    ORDER BY blent.nobl
    Trop rapide

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Il faut exclure les lignes de blent pour lesquelles il existe une ligne de bllig commençant par '222'. NOT EXISTS est fait pour ça.
    Au passage, en écrivant les jointures de manière normalisée, la requête devient plus lisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT  blent.nobl
        ,   blent.dtlivr
        ,   blent.ref
        ,   bllig.noart
        ,   bllig.design
        ,   bllig.qte
        ,   bllig.prxu
    FROM    blent
        INNER JOIN
            bllig
            ON  blent.nobl = bllig.nobl
    WHERE   blent.dtlivr >= '01/10/2010'
        AND bllig.noart NOT LIKE 'SAV%'
        AND NOT EXISTS
            (   SELECT  1
                FROM    bllig   excl
                WHERE   excl.nobl = blent.nobl
                    AND excl.noart LIKE '222%'
            )
    ORDER BY blent.nobl
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878

  7. #7
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Mais vous êtes carrément rapides ! Je vais en effet faire mes jointures de façon normalisées, je commence tout juste à essayer d'abandonner les anciennes habitudes.

    Merci pour tous vos conseils, c'est trop top, ça fonctionne à merveille. J'ai pris un level en écriture de requêtes SQL aujourd'hui !

    Merci et bonne soirée !

    Marie

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/02/2015, 10h13
  2. Réponses: 8
    Dernier message: 28/03/2008, 10h50
  3. [SQL] Condition si aucun enregistrement correspond à la requête
    Par syl2042 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/09/2007, 10h13
  4. Réponses: 1
    Dernier message: 12/03/2007, 17h58
  5. Réponses: 7
    Dernier message: 27/06/2006, 20h43

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