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 :

equivalent d'intersection et de moins dans mysql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut equivalent d'intersection et de moins dans mysql
    bonjours,
    qestion1:j'ai cette requête où je doit trouver la liste des noms des articles (NOMA) qui figurent sur les commandes du mois de Septembre 2004 mais pas sur celles du mois d'Août 2004.
    le problème que cette requête me donne un enregistrement qui ne s'attifait pas au critère demander



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select noma
    from articles
    where codeart in
    (select codeart 
      from detailco,commande
      where detailco.NUMCOM=commande.numcom
       and    commande.datecom between '2004-09-01' and '2004-09-30'
    and codeart not in
    (select codeart 
      from detailco,commande
      where detailco.NUMCOM=commande.numcom
       and    commande.datecom between '2004-08-01' and '2004-08-30'));
    **question 2: est ce que en mysql 5.1 se trouve un mot clé pour l'intersection et le mois entre deux requête (minus).

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    La FAQ MySQL t'informe que INTERSECT et MINUS n'existent pas en MySQL.

    Revenons à ce que tu cherches à obtenir :
    je dois trouver la liste des noms des articles (NOMA) qui figurent sur les commandes du mois de Septembre 2004 mais pas sur celles du mois d'Août 2004.
    Procédons par étape, en utilisant la syntaxe normalisée (depuis 1992 !) pour les jointures...

    Liste des articles qui figurent sur les commandes du mois de Septembre 2004 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT dc.codeart 
    FROM detailco dc
    INNER JOIN commande c ON dc.NUMCOM = c.numcom
    WHERE c.datecom BETWEEN '2004-09-01' AND '2004-09-30'
    Liste des articles qui figurent sur les commandes du mois d'Août 2004 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT dc.codeart 
    FROM detailco dc
    INNER JOIN commande c ON dc.NUMCOM = c.numcom
    WHERE c.datecom BETWEEN '2004-08-01' AND '2004-08-31'
    Au passage, je signale que le mois d'août s'arrête au 31 et pas au 30 !

    Liste des articles qui figurent sur les commandes du mois de Septembre 2004 mais pas sur celles du mois d'Août 2004 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT t1.codeart
    FROM (
        SELECT dc1.codeart
        FROM detailco dc1
        INNER JOIN commande c1 ON dc1.NUMCOM = c1.numcom
        WHERE c1.datecom BETWEEN '2004-09-01' AND '2004-09-30'
    ) t1
    LEFT JOIN (
        SELECT dc2.codeart
        FROM detailco dc2
        INNER JOIN commande c2 ON dc2.NUMCOM = c2.numcom
        WHERE c2.datecom BETWEEN '2004-08-01' AND '2004-08-31'
    ) t2 ON t1.codeart = t2.codeart
    WHERE t2.codeart IS NULL
    Une dernière jointure pour obtenir le nom des articles :
    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
    SELECT a.noma
    FROM articles a
    INNER JOIN (
        SELECT t1.codeart
        FROM (
            SELECT dc1.codeart
            FROM detailco dc1
            INNER JOIN commande c1 ON dc1.NUMCOM = c1.numcom
            WHERE c1.datecom BETWEEN '2004-09-01' AND '2004-09-30'
        ) t1
        LEFT JOIN (
            SELECT dc2.codeart
            FROM detailco dc2
            INNER JOIN commande c2 ON dc2.NUMCOM = c2.numcom
            WHERE c2.datecom BETWEEN '2004-08-01' AND '2004-08-31'
        ) t2 ON t1.codeart = t2.codeart
        WHERE t2.codeart IS NULL
    ) t3 ON a.codeart = t3.codeart
    ORDER BY a.noma
    Ceci dit, en dehors du problème de date sur le mois d'août et les jointures mal écrites, ta requête me semblait pourtant juste.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    merci CinePhil
    je prendrais tous vos remarque en conte

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par ka123tn Voir le message
    merci CinePhil
    je prendrais tous vos remarque en conte
    J'espère que ce n'est pas une légende
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Implémentation d'INTERSECT dans MySQL 5.5.27
    Par Damany dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/10/2012, 17h35
  2. PHP MySQL Signe "-" (moins) dans nom de champ
    Par superseba888 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/03/2009, 19h01
  3. Equivalent à sqlite_create_function dans MySQL?
    Par ecocentric dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/02/2009, 12h42
  4. Equivalent de INTERSECT en MySQL
    Par Jeetiz dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/02/2007, 14h21
  5. stockage d'images dans Mysql
    Par sessime dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/02/2004, 16h08

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