Partage
  • Partager sur Facebook
  • Partager sur Twitter

Différence entre deux tables identiques ?

Sujet résolu
    17 novembre 2017 à 12:02:59

    Bonjour,

    J'ai deux tables qui ont exactement la même syntaxe, qui sont rempli à 98% des mêmes données.

    Par ex table1 : id, champ1, champ2

              table2 : id, champ1, champ2

    J'aimerais connaitre les lignes qui n'existent pas dans la table1 et qui sont dans la table2.

    Attention, je ne veux pas faire un NOT IN seulement sur l'ID, je veux faire un test sur tous les champs en même temps.

    Merci d'avance ! :)

    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2017 à 13:06:17

      Bonjour,

      SELECT 'table1', T1.*
      FROM
          table1 T1
              LEFT JOIN table2 T2
                  ON T1.champ1 = T2.champ1
                  AND T1.champ2 = T2.champ2
                  AND T1.champ3 = T2.champ3
                  ...
      WHERE T2.id IS NULL
      
      UNION
      
      SELECT 'table2', T2.*
      FROM
          table1 T1
              RIGHT JOIN table2 T2
                  ON T1.champ1 = T2.champ1
                  AND T1.champ2 = T2.champ2
                  AND T1.champ3 = T2.champ3
                  ...
      WHERE T1.id IS NULL

      Cette requête va te lister les enregistrements qui ne sont dans table1 sans exact identique dans table2, et les enregistrements qui ne sont dans table2 sans exact identique dans table1.

      Cela t'oblige à saisir dans la condition de jointure externe toutes les colonnes ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        17 novembre 2017 à 13:30:39

        Super c'est exactement ce qu'il me faut !

        Merci. Je mets en résolu :)

        • Partager sur Facebook
        • Partager sur Twitter
          17 novembre 2017 à 15:07:16

          Bonjour ,

          Sinon, tu peux simplement utiliser EXCEPT !

          CREATE TABLE Table1
          (
          	ID INT,
          	Champ1 VARCHAR(10), 
          	Champ2 VARCHAR(10)
          )
          
          CREATE TABLE Table2
          (
          	ID INT,
          	Champ1 VARCHAR(10), 
          	Champ2 VARCHAR(10) 
          )
          
          INSERT INTO Table1
          VALUES 
          (1, 'Test 1', 'Test 1'),
          (2, 'Test 2', 'Test 2')
          
          INSERT INTO Table2
          VALUES 
          (1, 'Test 1', 'Test 1'),
          (2, 'Test 2', 'Test 3')
          
          -- Dans Table 1 mais pas dans Table 2
          SELECT * FROM Table1
          EXCEPT 
          SELECT * FROM Table2
          
          --Dans Table 2 mais pas dans Table 1
          SELECT * FROM Table2
          EXCEPT 
          SELECT * FROM Table1
          





          • Partager sur Facebook
          • Partager sur Twitter
            17 novembre 2017 à 15:17:54

            Attention, MySQL ne supporte pas EXCEPT ...
            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              17 novembre 2017 à 15:21:19

              Benzouye a écrit:

              Attention, MySQL ne supporte pas EXCEPT ...


              ça fait une raison de plus pour passer à un vrai SGBD alors.. :D
              • Partager sur Facebook
              • Partager sur Twitter

              Différence entre deux tables identiques ?

              × 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