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 les liens qui n'existent pas


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut Afficher les liens qui n'existent pas
    Le titre n'est peut être pas clair, alors je m'explique :

    j'ai trois tables :
    - opérateurs (id_op, nom_op)
    - machines (id_mach, nom_mach)
    - relation opérateurs/machines (id_op, id_mach)

    pour obtenir la liste des machines gérées par un opérateur, c'est simple : je fais une jointure entre la table opérateurs et la table relation.

    par contre, comment avoir la liste des machines que ne gère pas un opérateur ?

    merci de votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Une jointure externe et on ne récupère que les NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT m.*
    FROM machines m
    LEFT JOIN operateur_machine om ON m.id_mach = om.id_mach
    WHERE om.id_mach IS NULL

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Merci de ta réponse.

    Malheureusement, ça ne fonctionne pas.

    Ta requête me permet de connaitre les machines qui ne sont gérées par personne.

    Quand j'exécute ta requête, sachant que mes trois machines ont au moins une relation avec 1 opérateur, le résultat est toujours vide

    Dans mon cas, je souhaite faire la recherche pour un opérateur en particulier.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Dans ce cas on fait une sous-requête qui sélectionne les machines gérées par l'opérateur et on demande les machines qui ne sont pas retournées par cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT m.*
    FROM machines m
    WHERE m.id_mach NOT IN (
      SELECT m1.id_mach
      FROM machines m1
      INNER JOIN operateur_machine om ON m1.id_mach = om.id.mach
      WHERE om.id_op = NumeroOperateurSouhaité
    )

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Ca fonctionne !
    Merci de ton aide

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 391
    Points
    18 391
    Par défaut
    NOT EXISTS est un peu plus élégant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT m.*
    FROM machines m
    WHERE NOT EXISTS
    (SELECT 1
    FROM machines m1
    INNER JOIN operateur_machine om ON m1.id_mach = om.id_mach
    WHERE om.id_op = NumeroOperateurSouhaité
    AND m.id_mach = m1.id_mach)

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

Discussions similaires

  1. [MySQL] Afficher les services qui n'ont pas de relation avec une famille
    Par yosraisi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/06/2008, 11h11
  2. Afficher une liste qui n'existe pas dans la base de données.
    Par Zvetch dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/09/2007, 13h23
  3. Réponses: 1
    Dernier message: 17/07/2007, 15h45
  4. Afficher les pseudos qui ne commencent pas par une lettre.
    Par asoka13 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/07/2007, 17h30
  5. Réponses: 3
    Dernier message: 26/07/2006, 20h41

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