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 :

équivalant de la commande MINUS en MySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut équivalant de la commande MINUS en MySQL
    Bonjour,

    je cherche à faire la chose suivante :

    j'ai 2 tables A et B liées par le champ Num.
    La table B a un champ toto.

    Je souhaite sélectionner les enregistrements de la table A tel que les enregistrements liés de la table B aient le champ toto différent de 1.
    Or il est possible que des enregistrements de la table A n'aient pas de correspondant dans la table B. La jointure faite sur le champ num m'empêche de récupérer ces enregistrements (alors que leur champ table B.toto est différent de 1 puisque l'enregistrement n'existe pas).

    La requête suivante ne me convient donc pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT tableA.num
    FROM tableA, tableB
    WHERE tableA.num = tableB.num AND tableB.toto <> 1

    Je pensais donc utiliser MINUS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT tableA.num
    FROM tableA
    MINUS
    SELECT tableA.num 
    FROM tableA, tableB
    WHERE tableA.num = tableB.num AND tableB.toto = 1
    Or, il semble qu'en MySQL, l'opérateur MINUS n'existe pas.

    Auriez-vous une idée ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 316
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 316
    Points : 15 651
    Points
    15 651
    Par défaut Re: équivaelent de la commande MINUS en MySQL
    essaye ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tableA.num
    FROM tableA
    LEFT JOIN tableB ON tableA.num = tableB.num
    WHERE tableB.toto <> 1
    plus d'info sur les jointures externes :
    http://sql.developpez.com/sqlaz/jointures/#L2.3

    si ce que je t'ai donné ne fonctionne pas, montre nous le résultat obtenu et ce que tu aimerai avoir

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Merci

    C'est presque ça. Il faut cependant rajouter OR tableB.toto IS NULL pour prendre les enregistrements non présents dans tableB mais présents dans tableA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tableA.num 
    FROM tableA 
    LEFT JOIN tableB ON tableA.num = tableB.num 
    WHERE tableB.toto <> 1 OR tableB.toto IS NULL

    Merci encore pour ton aide

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Moi j'ai un autre probleme avec le remplacement de MINUS pour mysql.

    Voila un exemple de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     ID  | ATR
    -----------
      1  | 0
      2  | 0
      1  | 1
    Je cherche a faire l'equivalent de cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Table WHERE ATR=0
    MINUS
    SELECT * FROM Table WHERE ATR=1
    C'est à dire trouver tous les ID qui ont juste l'atribut 0 et non pas l'attribut 1 aussi.

    Si quelqu'un a une solution je suis preneur.

    Merci
    Seb

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Salut !

    Pourrais-tu préciser ton problème car si je l'ai bien compris il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE ATR=0
    Tu récupèreras tous les enregistrements de la table "Table" dont ATR vaut 0 et donc ne vaut pas 1.

    Le Minus que tu faisais ne servait à rien étant donné que tu n'auras jamais des résultats ramenés à la fois par la 1ère et la 2ème partie de ta requête

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par El Saigneur
    Salut !

    Pourrais-tu préciser ton problème car si je l'ai bien compris il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE ATR=0
    Tu récupèreras tous les enregistrements de la table "Table" dont ATR vaut 0 et donc ne vaut pas 1.

    Le Minus que tu faisais ne servait à rien étant donné que tu n'auras jamais des résultats ramenés à la fois par la 1ère et la 2ème partie de ta requête
    non en fait ce n'est pas ca. Regarde bien la table l'ID 1 a la fois les 2 valeurs 0 et 1 pour attribut (ATR).
    Moi ce que je veu c seulement les ID qui ont ATR=0 et qui n'ont pas aussi ATR=1 ce qui doit donner seulement ID=2 car ID=1 a bien 0 mais aussi 1 pour ATR.

    Merci pour l'aide en tout cas.

    Seb

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    OK !
    Excuse moi, j'avais pas vu que le 3eme enregistrement avait aussi ID=1.

    Du coup je ne vois pas comment faire cela en une seule requête sans MINUS. Donc du coup, je ne vois pas comment faire avec une base de données MySQL.
    Si tu récupères les résultats dans un programme, tu pourrais faire deux requêtes que tu stockes dans des tableaux.
    Par exemple dans le 1er tableau : les enregistrements tels que ATR = 0
    puis dans un deuxième tableau les enregistrements tels que ATR <> 0.
    Enfin tu boucle sur le 1er tableau. Dans la boucle tu boucles sur le 2ème tableau. Dans cette seconde boucle tu testes si le deuxième tableau a un ID équivalent à l'ID de l'enregistrment du 1er tbaleau sur lequel tu boucles. Tu supprime les lignes du 1er tableau qui ont un ID qui se trouve dans le deuxième.

    A la fin ton 1er tableau est débarrassé des ID qui ont aussi un ATR <> 0.


    @ +

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci pour la reponse.

    Je pensais faire cela mais je voulais savoir avant si il n'y avait pas de solution seulement avec des requetes... Apparament non.

    a bientot
    Seb

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

Discussions similaires

  1. [PowerShell] POWERSHELL : équivalent de la commande WC
    Par tibal dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/03/2008, 22h17
  2. POWERSHELL : équivalent de la commande AWK
    Par tibal dans le forum Windows
    Réponses: 6
    Dernier message: 10/03/2008, 11h42
  3. équivalent de la commande trace de Linux
    Par Chatbour dans le forum Windows
    Réponses: 3
    Dernier message: 29/12/2007, 21h02
  4. équivalent de la commande MERGE dans mySQL ?
    Par Ekimasu dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2007, 21h45
  5. J'arrive pas a faire les requete (minus et mysql)
    Par icicmoi dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/01/2007, 10h26

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