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 :

[Access 2003] Sélection d'un table avec exclusion


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [Access 2003] Sélection d'un table avec exclusion
    Bonjour à tous,

    Bravo pour le forum, super et très intéressant.

    J'en viens directement à mon problème. J'ai créé une base sous Microsoft Access 2003 et je souhaite avoir une vue sur une table par rapport à une autre. La 1ere table (TireurComplet) comprend la liste totale des noms de chasseurs avec leur n° permis, assurance... voici la liste des champs :

    Num -> clef primaire
    Ensaison -> champ OUI/NON à cocher
    Tireur -> Nom du tireur
    Validé le
    Délivré par
    N° Permis
    Assur N°
    Comp Assur
    Assuvalid
    TypeTireur -> Partenaire ou Invité
    N° Tel
    N° Port
    La seconde table (Tireur) est la liste des tireurs pour la saison en cours. Je dois cocher les noms dans TireurComplet et j'aimerai avoir, via une requête, les enregistrements qui ne sont pas dans la table Tireur. Cela pour pouvoir rajouter en cours de saison un nouveau chasseur juste en le cochant via une requete d’ajout. Voici la liste des champs de la seconde table :

    Tireur -> Nom du tireur
    Validé le
    N° Permis
    Assur N°
    Comp Assur
    Assuvalid
    TypeTireur -> Partenaire ou Invité
    N° Tel
    N° Port
    J'ai crée la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TireurComplet.Tireur, TireurComplet.[Validé le1], TireurComplet.[N°  Permis], TireurComplet.[Assur N°], TireurComplet.[Comp Assur], TireurComplet.Assuvalid, TireurComplet.TypeTireur, TireurComplet.[N° TEL], TireurComplet.[N° Port]
    FROM TireurComplet, Tireur
    WHERE (((TireurComplet.Tireur)<>Tireur.Tireur) and ((TireurComplet.TypeTireur)="Invité") and ((TireurComplet.EnSaison)=yes));
    Mais lorsque je la lance elle me sort plusieurs fois à la suite la même liste de réponses. (10 fois les noms identiques) Je ne comprends pas cette réponse surtout que lorsque je change le <> par = tout fonctionne correctement. Avez-vous une idée et pouvez-vous m'aider ? Merci d'avance !

    Morph.


    FRANK

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Bonjour et bienvenue sur le forum !
    Ce que tu essaies de faire est une requête de non correspondance, ce qui se
    fait très facilement avec l'assistant de requêtes d'Access.

    Merci de modifier ton tître en éditant ton premier message de cette enfilade car celui doit être en rapport avec ton problème technique

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    désolé pour mon texte non mis en page.

    Justement, le code sql que je donne vient d'une requête crée par l'assistant.

    J'ai testé sur plusieurs postes pour voir si ça vient d'un bug mais c'est la même chose partout...

    J'en sort pas...

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut, et bienvenue sur ce forum,

    Imagine que tu as 11 enregistrement dans chaque table, les mêmes (selon le nom).

    La requête avec le "=" va bien re ramener 11 lignes, car tu feras ta jointure entre tes 2 tables sur le champ "Nom" (on suppose dans ce cas que les 11 noms sont différents).

    Par contre, avec le "<>", tu n'as pas de jointures entre les 2 tables : ta requête va donc te ramener pour chaque enregistrement de ta table TireurComplet, les 10 lignes de la table Tireur ne correspondant pas à tes enregistrements : normal que tu aies tant de "doublons" dans tes résultats, cela s'appelle un produit cartésien.

    Je pense que la requête que tu cherches ressemble à celle-ci : tu cherches les enregistrements de TireurComplet n'apparaissant pas dans Tireur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Tireur, TireurComplet.[Validé le1], TireurComplet.[N°  Permis], 
           TireurComplet.[Assur N°], TireurComplet.[Comp Assur], TireurComplet.Assuvalid, 
           TypeTireur, TireurComplet.[N° TEL], TireurComplet.[N° Port]
      FROM TireurComplet
     WHERE TireurComplet.TypeTireur = "Invité"
       AND TireurComplet.EnSaison = yes
       AND Tireur NOT IN (SELECT Tireur
                            FROM Tireur) ;
    Par contre, c'est une erreur d'avoir nommé un des tes champs du même nom que celui de ta table, il aurai fallu baptiser ce champ Nom, ça aurait été beaucoup plus clair

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    alors là merci !!!

    je test tout ça et vous tiens au courant !

    Merci encore

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    ouaiiis trop d'la balle ça marche !
    ça fait 10 mille ans que j'essaye un truc dans le même genre avec
    un MINUS ou EXCEPT et je viens d'apprendre que ça pouvait pas marcher
    sous ACCESS....

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut J'ai un souci pour le faire sur MySQL...
    J'ai essayé la même chose avec la solution:

    select * from candidatcv where id in (select id_cv from cv_choisis);

    Mais ca me renvoit un message d'erreur:

    Erreur

    requête SQL :

    SELECT *
    FROM candidatcv
    WHERE id
    IN (


    SELECT id_cv
    FROM cv_choisis
    )
    LIMIT 0 , 30

    MySQL a répondu:


    #1064 - You have an error in your SQL syntax near 'SELECT id_cv
    FROM cv_choisis ) LIMIT 0, 30' at line 5
    [Documentation] · [Retour]


    J'ai essayé d'utiliser la méthode EXCEPT qui marche sous Oracle, mais le mot clé n'est pas reconnu.

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

Discussions similaires

  1. [access 2003] Supprimer un fichier .csv avec du code VBA
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/02/2008, 16h42
  2. Croisement de table avec exclusion
    Par daveInIreland dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/04/2007, 15h53
  3. plantage access 2003 suite import de tables
    Par ciboulette dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2006, 15h50
  4. Réponses: 15
    Dernier message: 22/06/2006, 16h17
  5. Réponses: 7
    Dernier message: 26/05/2006, 14h14

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