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 :

Comment retourné le contraire d'une requête SQL ?


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Comment retourné le contraire d'une requête SQL ?
    Bonjour,

    J'ai la requête SQL suivante :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM akf, akf_ad
    WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
    AND akf_ad_nom = SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC

    Suivant les associations créer entre mes deux tables, cette requête me retourne un certain nombre d'enregistrement. Je souhaiterai pouvoir retourner les enregistrement qui ne réponde pas à ces association (inversé le résultat de cette requête) mais comment faire ?

    J'ai essayé ca :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM akf, akf_ad
    WHERE SUBSTR( akf_login, 1, 1 ) != SUBSTR( akf_ad_prenom, 1, 1 )
    AND akf_ad_nom != SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC

    Mais cela me retourne n'importe quoi...

    Une idée ?

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    C'est pas un problème de mysql, c'est un problème de logique
    Le contraire de A AND B c'est !A OR !B, ce qui donne dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM akf, akf_ad
    WHERE SUBSTR( akf_login, 1, 1 ) != SUBSTR( akf_ad_prenom, 1, 1 )
    OR akf_ad_nom != SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC
    Cartes Pokémon, Yugioh, Magic ?
    Communauté d'échange

  3. #3
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Avec un NOT EXIST, en requete principale tu mets ce que tu veux afficher, qui n'existe pas dans la requête imbriquée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
     FROM akf, akf_ad
    WHERE  NOT EXISTS(
                  SELECT *
                  FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
                 )
    ORDER BY akf_login ASC
    Je ne connais pas trop tes tables mais ca devrait donner quelque chose comme ca.


    Citation Envoyé par arnaudperfect Voir le message
    Bonjour,

    J'ai la requête SQL suivante :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM akf, akf_ad
    WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
    AND akf_ad_nom = SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC

    Suivant les associations créer entre mes deux tables, cette requête me retourne un certain nombre d'enregistrement. Je souhaiterai pouvoir retourner les enregistrement qui ne réponde pas à ces association (inversé le résultat de cette requête) mais comment faire ?

    J'ai essayé ca :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM akf, akf_ad
    WHERE SUBSTR( akf_login, 1, 1 ) != SUBSTR( akf_ad_prenom, 1, 1 )
    AND akf_ad_nom != SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC

    Mais cela me retourne n'importe quoi...

    Une idée ?
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oui j'avais pensé au NOT EXISTS
    J'ai tester ta requête au j'ai une erreur. (j'ai une erreur de syntaxe).

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS ( SELECT * FROM akf , akf_ad WHERE SUBSTR( akf_login , 1 , 1 ) = SUBST' at line 1

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Alors j'ai testé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
     FROM akf, akf_ad
    WHERE  NOT EXISTS(
                  SELECT *
                  FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
                 )
    ORDER BY akf_login ASC
    et MySQL me retourne aucun enregistrement, alors qu'avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
                  FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
    j'ai 127 enregistrement de retourné sur les 153...

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    Et celle que je t'ai proposé ne marche pas non plus ?
    Cartes Pokémon, Yugioh, Magic ?
    Communauté d'échange

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oui elle fonctionne, mais me retourne n'importe quoi.

    En faite j'ai deux tables.

    A. table avec les logins d'utilisateurs du type : 1er lettre du prénom+nom
    B. table avec le prénom et nom des utilisateurs de la société.

    Le but de ma requête :

    Déterminer le prénom de mes login présents dans la table A.

    Pour cela :

    Dans la table A, je sélectionne le 1er caractère (soit la 1er lettre du prénom).
    Je demande si cette lettre est égale à la 1er lettre du prénom de la table B.
    Ensuite
    Dans la table A je sélectionne la parti qui concerne le Nom de l'utilisateur et je demande si cette partie est égal au champ "Nom" de ma table B.

    J'ai donc un certain nombre de résultat qui respecte mes deux contraintes. Seulement, j'aimerai maintenant savoir ceux qui ne la respecte pas pour pouvoir les analyser par la suite.

    La fonction "NOT EXISTS" me semblait la plus adapter, mais je ne sais pas pourquoi, elle ne me retourne aucun enregistrement...

  8. #8
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Je ne comprends pas pourquoi tu t'amuses a comparer la première lettre, puis le reste...pourquoi ne pas mettre une contrainte simple sur le tout???? ou bien en cas de faux "doublons" ajouter une autre contrainte.

    Et oui c'est bien avec un NOT EXISTS. Peux-tu poster la structure de tes deux tables stp

    Citation Envoyé par arnaudperfect Voir le message
    oui elle fonctionne, mais me retourne n'importe quoi.

    En faite j'ai deux tables.

    A. table avec les logins d'utilisateurs du type : 1er lettre du prénom+nom
    B. table avec le prénom et nom des utilisateurs de la société.

    Le but de ma requête :

    Déterminer le prénom de mes login présents dans la table A.

    Pour cela :

    Dans la table A, je sélectionne le 1er caractère (soit la 1er lettre du prénom).
    Je demande si cette lettre est égale à la 1er lettre du prénom de la table B.
    Ensuite
    Dans la table A je sélectionne la parti qui concerne le Nom de l'utilisateur et je demande si cette partie est égal au champ "Nom" de ma table B.

    J'ai donc un certain nombre de résultat qui respecte mes deux contraintes. Seulement, j'aimerai maintenant savoir ceux qui ne la respecte pas pour pouvoir les analyser par la suite.

    La fonction "NOT EXISTS" me semblait la plus adapter, mais je ne sais pas pourquoi, elle ne me retourne aucun enregistrement...
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    exemple de table :

    Table akf :
    akf_id (exemple : 1)
    akf_login (exemple : JDUPOND)

    Table akf_ad :
    akf_ad_id (exemple : 35)
    akf_ad_nom (exemple : DUPOND)
    akf_ad_prenom (exemple : JEAN)

    Attention, je pourrai avoir plusieurs DUPOND avec des prénoms différents d'où mon test sur la 1er lettre du prénom.

  10. #10
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Le problème étant surtout si tu as plusieurs DUPONT avec un prénom commencant par la lettre J comme dans ce cas la, tu fais comment pour les distinguer?

    tu dois avoir un problème de logique dans cette histoire..

    Citation Envoyé par arnaudperfect Voir le message
    exemple de table :

    Table akf :
    akf_id (exemple : 1)
    akf_login (exemple : JDUPOND)

    Table akf_ad :
    akf_ad_id (exemple : 35)
    akf_ad_nom (exemple : DUPOND)
    akf_ad_prenom (exemple : JEAN)

    Attention, je pourrai avoir plusieurs DUPOND avec des prénoms différents d'où mon test sur la 1er lettre du prénom.
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    si j'ai :

    Jean DUPOND
    et
    Jean DUPONT ?

    ou
    Jean DUPONT
    et
    Jean DUPONT ?

    Je n'ai pas de doublon de prénom dans mon cas ;-)

  12. #12
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Bonjour,

    Fleur-anne a raison. Même si tu n'a pas de doublons pour l'instant, tu risques d'y être confronté un jour ou l'autre, alors autant prévoir un critère unique pour pouvoir les distinguer.
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    non j'en aurai pas ! lol

    Mes listes sont fixe, elle ne vont pas évoluer...

  14. #14
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    alors j'ai réalisé plusieurs tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM akf
    WHERE  EXISTS(
                 SELECT *
                 FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
                 )
    ORDER BY akf_login ASC
    Je retourne 153 enregistrements sur 153

    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	SELECT *
     FROM akf
    WHERE  NOT EXISTS(
                 SELECT *
                 FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
                 )
    ORDER BY akf_login ASC
    je retourne 0 enregistrement, ce qui est normal.

    Mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
                 FROM akf, akf_ad
                 WHERE SUBSTR( akf_login, 1, 1 ) = SUBSTR( akf_ad_prenom, 1, 1 )
                 AND akf_ad_nom = SUBSTR( akf_login, 2 )
    ORDER BY akf_login ASC
    je retourne 127 enregistrements sur les 153.

    Comment avoir seulement les 26 enregistrements restant ?

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

Discussions similaires

  1. Comment contourner un espace sur une requête sql ?
    Par neuneu1 dans le forum Bases de données
    Réponses: 6
    Dernier message: 03/06/2008, 18h31
  2. comment passé un paramètre dans une requête sql
    Par java2008 dans le forum BIRT
    Réponses: 0
    Dernier message: 03/03/2008, 12h11
  3. Réponses: 13
    Dernier message: 26/07/2007, 08h50
  4. Comment lire le résultat d'une requête SQL?
    Par cmako dans le forum JDBC
    Réponses: 2
    Dernier message: 22/05/2007, 17h36
  5. Comment utiliser des variables dans une requête SQL ?
    Par Ragnarok85 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 12/02/2007, 16h23

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