Requête Sur trois Tables

Bonjour,

Je travaille avec trois tables l'une d'entre elles est une table association pour les deux autres

contacts
groups
contact_group (table association)

Je veux faire une requête pour afficher les contacts qui ne sont pas dans un groupe donné (group_id=2) par exemple et les contacts qui n'ont aucun groupe

Merci a tous

1 réponse

  1. Modérateur
    Bonjour

    Un jointure left (enfin 2)
    Et un where
    Et le tour est joué

    Cordialement, 
    Jordane                                                                 
    0
    1. Modérateur
      Un truc du genre

      Pas dans le groupe 2

      SELECT C.*
      FROM contact_group CG
      LEFT JOIN contacts C ON C.id = CG.id_contact
      WHERE CG.group_id <> 2
      

      Ou ceux qui Sont dans un groupe mais dans le 2
      SELECT C.*
      FROM contact_group CG
      LEFT JOIN contacts C ON C.id = CG.id_contact
      WHERE CG.group_id <> 2
       AND CG.group_id IS NOT NULL
      

      Dans aucun groupe

      SELECT C.*
      FROM contacts C
      LEFT JOIN contact_group CG ON C.id = CG.id_contact
      WHERE CG.group_id  IS NULL
      

      Ou encore avec une sous-requête
      SELECT C.*
      FROM contacts C
      WHERE id NOT IN (
       SELECT DISTINCT id_contact
       FROM contact_group
      ) 
      
      0
    2. @jordane45Merci pour la réponse
      Mais Comment puis combiner les deux requêtes
      "pas dans le groupe 2" et "dans aucun groupe"
      Merci a tous...
      0
    3. Contributeur
      @tallest17bonjour, suggestion:
      SELECT C.*
      FROM contact_group CG
      RIGHT JOIN contacts C ON C.id = CG.id_contact
      WHERE CG.group_id <> 2
       OR CG.group_id IS NULL
      0
    4. Modérateur
      @tallest17Heu....
      Si dans aucun groupe ... alors ... forcément il n'est pas dans le groupe 2 .... cqfd !
      0
    5. Modérateur
      @yg_beSi CG.group_id IS NULL ... alors il est FORCEMENT différent de 2 :-)
      0