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

  1. #1
    Membre éprouvé
    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
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Modérateur

    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
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre éprouvé
    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
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Modérateur

    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.
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Membre éprouvé
    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
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Modérateur

    j'ai un champ "objet"
    Quel est le nom de ta colone ?
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  7. #7
    Membre actif
    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 éprouvé
    Avec un peu de retard mais je vois que je n'ai pas remercié et pas mis sur resolu !

    Ca fonctionne nickel ainsi !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Expert éminent sénior
    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

    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

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  11. #11
    Expert éminent sénior
    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/?pa...oncept#ReqOpIn