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 :

requete de non correspondance


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 8
    Points
    8
    Par défaut requete de non correspondance
    Bonjour,

    voici 2 tables et leur enregistrements respectifs :
    table console
    user_id, forum_id
    24, 1
    24, 6
    3184, 28
    3184, 1

    la colonne user_id = identifiant de l'utilisateur
    la colonne forum_id = identifiant d'un forum

    table qmail
    identifiant, forum
    3184, 28

    la colonne identifiant = identifiant de l'utilisateur
    la colonne forum = identifiant d'un forum

    je cherche a obtenir pour un forum donné, pour l'exemple le forum "1", les identifiants des utilisateurs que je ne retrouve pas dans la table qmail.

    concrètement, voici ce que je cherche a obtenir :
    resultat a obtenir
    user_id
    3184
    24

    Quelle requete effectuer ?

    merci pour votre aide

    Nicolas

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    Essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT user_id FROM console WHERE forum_id = 1 AND NOT EXIST (SELECT identifiant FROM qmail where forum = 1);

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 8
    Points
    8
    Par défaut
    merci eric, mais mysql me donne une erreur avec ta solution.

    je viens de trouver, ce n'est peut être pas simple mais ça fonctionne !!!

    SELECT users.user_id, synchro.identifiant
    FROM (SELECT user_id FROM console WHERE forum_id=1) users
    LEFT OUTER JOIN (SELECT identifiant FROM qmail WHERE forum=1) synchro
    ON (users.user_id = synchro.identifiant)
    WHERE synchro.identifiant IS NULL
    A+

    Nicolas

  4. #4
    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 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    La même requête en moins compliqué et plus optimisé (sans les sous-requêtes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.user_id
    FROM console c
    LEFT OUTER JOIN qmail q ON c.user_id = q.identifiant AND c.forum_id = q.forum
    WHERE q.identifiant IS NULL
    and c.forum_id = 1
    Si il y a beaucoup de forums et d'utilisateurs, ça aidera un peu aux performances .

    ced

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 424
    Points : 382
    Points
    382
    Par défaut
    J'ai fait une petite erreur dans la syntaxe, j'ai confondu avec un autre SGBD, cette syntaxe devrai marcher, et ca évite la jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT user_id
      FROM console 
     WHERE forum_id = 1 
       AND user_id NOT IN (SELECT identifiant FROM qmail WHERE forum = 1);

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Merci Ced pour ta solution,

    ça marche nickel.

    Quant à Eric93 :
    ca évite la jointure
    je pense qu'il vaut mieux une jointure qu'une sous-requête.

    En tout cas je trouve ça plus simple avec une jointure, en plus il me semble que c'est plus rapide (mais c'est à confirmer)

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

Discussions similaires

  1. requete de non correspondance
    Par cedlannoy dans le forum SQL
    Réponses: 3
    Dernier message: 18/03/2008, 18h28
  2. Requete de non-correspondance (find unmatch)
    Par zitoune92 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 08/03/2008, 21h43
  3. requete de non correspondance
    Par pseudobidon57 dans le forum Développement
    Réponses: 3
    Dernier message: 04/10/2007, 15h34
  4. Création d'une requête de non correspondance
    Par angélique dans le forum Access
    Réponses: 2
    Dernier message: 18/07/2006, 16h50
  5. Requete de non-correspondance
    Par nassu dans le forum Access
    Réponses: 2
    Dernier message: 10/05/2006, 19h28

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