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 et SQL. Discussion :

afficher les elements d'une table qui ne sont pas affectés à un champ d'1 autre table


Sujet :

Requêtes et SQL.

  1. #1
    Membre émérite Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 003
    Points : 2 261
    Points
    2 261
    Par défaut afficher les elements d'une table qui ne sont pas affectés à un champ d'1 autre table
    Bonjour

    Je cherche à faire un truc surement trés simple auquel je n'arrive pas à donner un nom (donc une solution via une recherche...)

    J'ai des objects qui sont définis dans une table (Tb_objet)
    Dans une autre table (Tb2), j'ai un champ "objet" ou je viens selectionner un des objets de la table Tb_objet.

    Je cherche a faire une requete qui me donne tous les éléments de Tb_objet qui ne sont pas présents dans le champ "objet" de la table Tb2.

    Merci par avance

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Tb_objet.TonChamps AS Objets
     
    FROM Tb_objet
     
    WHERE Objets NOT IN 
                                 (SELECT DISTINCT Tb2.objet
                                  FROM Tb2)
    Ou par IS NULL

  3. #3
    Membre émérite Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 003
    Points : 2 261
    Points
    2 261
    Par défaut
    bonjour

    Au lancement de cette requète, on me demande de saisir la valeur du paramètre "Objets".
    =>je rentre n'importe quoi et ca me donne zero resultats...

    J'ai trouvé un tuto qui me parle de remplacer IN par LIKE mais on me dit alors que la sous requete ne peut contenir plus d'un enregistrement...

    une idée ?

    Merci

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Pour le "objet" j'ai mis un "s" en trop, désolé. Il s'agit de mettre le nom de ton champs, sinon tu peux aussi remplacer NOT IN par NOT EXIST.

    Enfin pour le LIKE, cela compare une chaine de caractère... Je ne crois pas que ce soit judicieux dans ton cas.

  5. #5
    Membre émérite Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 003
    Points : 2 261
    Points
    2 261
    Par défaut
    bonjour

    ca ne marche toujours pas

    objects, avec un s, dans le premier exemple n'est il pas juste un nom interne à la requete ?

    si je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS Objets 
    FROM Tb_objet 
    WHERE Objets NOT IN (SELECT DISTINCT Tb2.objet
    FROM Tb2)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS objet 
    FROM Tb_objet 
    WHERE objet NOT IN (SELECT DISTINCT Tb2.objet
    FROM Tb2)
    ca me fait pareil, ca me demande la valeur du parametre "Objets" ou "objet"

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS objet 
    FROM Tb_objet 
    WHERE objet NOT EXIST (SELECT DISTINCT Tb2.objet
    FROM Tb2)
    ca me dit qu'il y a une erreur de synthaxe

    je patoge...

    Merci

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    j'ai un champ "objet"
    Quel est le nom de ta colone ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 582
    Points : 218
    Points
    218
    Par défaut
    Access et le SQL.... les AS, il interprète pas très bien
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS Objets 
    FROM Tb_objet 
    WHERE Tb_objet.IDobjet NOT IN (SELECT DISTINCT Tb2.objet
    FROM Tb2)

  8. #8
    Membre émérite Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 003
    Points : 2 261
    Points
    2 261
    Par défaut
    Avec un peu de retard mais je vois que je n'ai pas remercié et pas mis sur resolu !

    Ca fonctionne nickel ainsi !

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par charliejo Voir le message
    Access et le SQL.... les AS, il interprète pas très bien
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS Objets 
    FROM Tb_objet 
    WHERE Tb_objet.IDobjet NOT IN (SELECT DISTINCT Tb2.objet
    FROM Tb2)
    Ce n'est pas une question d'interprétation. Le AS vient lors de l'affichage alors que le WHERE bien avant. Au stade du WHERE le moteur a aucune idée de ce que représente Objets.

    A priori, in LEFT JOIN serait plus performant dans ce cas en ne gardant que les valeurs nulls de tb2.IdObjet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tb1.idObjet
    FROM tb1 LEFT JOIN tb2 ON tb1.idObjet = tb2.idObjet
    WHERE tb2.IdObjet IS NULL

  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Citation Envoyé par Tofalu Voir le message
    Ce n'est pas une question d'interprétation. Le AS vient lors de l'affichage alors que le WHERE bien avant. Au stade du WHERE le moteur a aucune idée de ce que représente Objets.

    A priori, in LEFT JOIN serait plus performant dans ce cas en ne gardant que les valeurs nulls de tb2.IdObjet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tb1.idObjet
    FROM tb1 LEFT JOIN tb2 ON tb1.idObjet = tb2.idObjet
    WHERE tb2.IdObjet IS NULL
    Bonjour Tofalu,

    Effectivement, c'est une petite erreur de ma part

    IS NULL était effectivement la deuxième solution que je proposais... Je sais pas pourquoi j'ai pas mis les 2 requêtes


  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    De plus pour que la première solution marche à coup sûr il faut retirer les nulls dans le not in sinon ça bug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tb_objet.IDobjet AS Objets 
    FROM Tb_objet 
    WHERE Tb_objet.IDobjet NOT IN (SELECT DISTINCT Tb2.objet
    FROM Tb2 WHERE Tb2.Objet IS NOT NULL)
    http://access.developpez.com/faq/?page=Concept#ReqOpIn

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

Discussions similaires

  1. afficher les lignes d'un fichier qui ne sont pas dans lun autre fichier
    Par israellita dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 11/03/2011, 12h39
  2. Parcourir et afficher les elements d'une liste chainee
    Par student_ dans le forum Débuter
    Réponses: 15
    Dernier message: 22/12/2009, 22h48
  3. Réponses: 9
    Dernier message: 31/05/2009, 04h59
  4. Réponses: 2
    Dernier message: 07/12/2007, 16h20
  5. afficher les element d'une file
    Par jalilc dans le forum C
    Réponses: 16
    Dernier message: 23/05/2006, 19h15

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