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 :

[MySQL] Exclusion sur des champs de 2 tables différentes


Sujet :

Langage SQL

  1. #1
    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 [MySQL] Exclusion sur des champs de 2 tables différentes
    Bonjour,
    J'ai essayé la solution:

    select * from candidatcv where id not 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.

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    essaie de supprimer les lignes inutiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM candidatcv
    WHERE id IN ( SELECT id_cv FROM cv_choisis )
    LIMIT 0 , 30
    Bonne journée

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Essaye une requête qui n'utilise pas de sous-requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM candidatcv
      LEFT JOIN cv_choisis ON id_cv=id
    WHERE id_cv IS NOT NULL

  4. #4
    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
    La requete est bonne, mais ca ne repond pas tout a fait à ce que je voudrais:

    En fait je souhaite avoir tous les CVs de candidatcv, qui n'ont pas d'entrée dans cv_choisis pour le compte 'bermu':

    SELECT *
    FROM candidatcv
    LEFT JOIN cv_choisis ON (id_cv!=id)
    WHERE cv_choisis.login = 'bermu';


    Ca me renvoie un nombre incroyable de lignes....


    PS : Dans mon premier message, je me suis trompé, il fallait voir un "NOT IN" à la place du "IN"...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM candidatcv
    LEFT JOIN cv_choisis
      ON id_cv=id AND cv_choisis.login = 'bermu'
    WHERE id_cv IS NULL
    Le LEFT JOIN joinds à candicatcv un cv_choisis si :
    - il existe (cv_id=id)
    - le login est 'bermu'
    Dans le cas où la condition (ON) d'un LEFT JOIN n'est pas vérifiée, les champs correspondants seront mis à NULL.

    Comme on veux que les résultats pour lesquels cette condition est fausse (et donc que id_cv est NULL), on ajoute une clause WHERE (id_cv IS NULL).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM candidatcv
    LEFT JOIN cv_choisis ON (id_cv!=id)
    WHERE cv_choisis.login = 'bermu'
    Avec cette requête, on obtient, pour chaque candidatcv, tous les cv_choisis pour lesquels id_cv!=id et dont le login est 'bermu'

  6. #6
    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
    Super ça marche.
    Bravo et merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/06/2010, 15h45
  2. [AC-2003] Regle de validation sur des champs dates dans des tables différentes
    Par ingal30 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2010, 18h42
  3. Réponses: 1
    Dernier message: 10/04/2008, 15h52
  4. Ajouter des champs d'une table différente dans un formulaire
    Par Bouom771 dans le forum Modélisation
    Réponses: 5
    Dernier message: 10/01/2008, 20h03
  5. Audit sur l'utilisation des champs de plusieurs tables
    Par Xavier2701 dans le forum Oracle
    Réponses: 1
    Dernier message: 29/03/2007, 08h26

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