Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL Sélectionner les champs absents d'une table

Sujet résolu
    13 novembre 2017 à 22:43:29

    Bonsoir,

    Désolé pour le peu de sens dans le titre, j'ai eu du mal à trouver comment le formuler clairement.

    J'ai une opération liant deux tables à faire et j'ignore totalement comment l'effectuer. J'essai de sélectionner dans ma table1 toutes les entrées pour lesquelles l'ID est absent des id_table1 de ma table2. Etant donné que j'aimerais vraiment me contenter d'une requête SQL et ne pas avoir à retravailler les tableaux de données pour arriver au resultat, j'ai essayé d'imaginer ce que ça donnerait avec un LEFT JOIN, mais forcement la condition s'appliquait pour les deux tables quand même. Google m'a fournit quelques pistes, mais via des mots clés et façons de faire que je ne connais pas du tout donc je me permets de venir demander conseils ici plutôt que de faire une bêtise.

    En espérant que quelqu'un pourra m'aider.

    Bonne soirée :)

    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2017 à 9:01:23

      Bonjour,

      Poonex32 a écrit:

      sélectionner dans ma table1 toutes les entrées pour lesquelles l'ID est absent des id_table1 de ma table2

      Ton idée de LEFT JOIN me paraît bonne, il suffit de donner une condition IS NULL :

      SELECT T1.*
      FROM
          table1 T1
              LEFT JOIN table2 T2
                  ON T1.id = T2.idtable1
      WHERE T2.idtable1 IS NULL
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        14 novembre 2017 à 9:32:04

        Bonjour,

        C'est exactement ce que je cherchais, merci.

        Par contre, j'ai oublié de préciser que j'ai un champ id_membre dans ma table2, et qu'il me faudrait donc sélectionner les entrées de la table1  n'existant pas dans la table2 uniquement pour un id_membre précis. Hors, comme justement c'est un cas où l'entrée n'existe pas, je ne vois pas du tout comment adapter ma condition en fonction de l'id_membre (qui du coup vaut NULL aussi pour les résultats retournés).

        Désolé de ne pas avoir précisé cela plus tôt. J'espère qu'il existe une solution dans ce genre là quand même parce que c'est vraiment ce que je cherche.

        Merci d'avance et bonne journée :)

        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2017 à 9:39:34

          Poonex32 a écrit:

          comme justement c'est un cas où l'entrée n'existe pas, je ne vois pas du tout comment adapter ma condition en fonction de l'id_membre (qui du coup vaut NULL aussi pour les résultats retournés).

          Ok, il faut donc mettre la condition sur l'id_membre dans la jointure pour maintenir la jointure gauche :

          SELECT T1.*
          FROM
          	table1 T1
          		LEFT JOIN table2 T2
          			ON T1.id = T2.idtable1
          			AND T2.id_membre = 'valeur souhaitée'
          WHERE T2.idtable1 IS NULL

          Cela te retourne les lignes de la table1 n'ayant pas de données dans la table2 pour le membre donné.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            14 novembre 2017 à 9:50:40

            Ça me semble parfait :D

            Merci beaucoup.

            • Partager sur Facebook
            • Partager sur Twitter

            SQL Sélectionner les champs absents d'une table

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown