SQL différences entre 2 tables

Résolu
Bonjour,

Ce problème à déjà été posé auparavant de façon plus ou moins claire, j'ai essayé moi même quelques methodes, malheureusement infructueuses :-(

Je veux juste comparer deux table
Tab1
A | 1
B | 2
C | 3

Tab 2
A | 1
B | 3
D | 4

Et obtenir toutes les entrées qui ne sont pas identiques.
Donc ici :
B | 2
C | 3
B | 3
D | 4

Je suis sur que la réponse ne va pas etre si compliquée et que donc je vais enrager de pas l'avoir trouvé mais je suis telelment dedans jusqu'au cou que je trouve plus rien :-(

3 réponses

  1. 2
    1. ... ain ! Mais c'est super complexe ! :'(
      comment ça se fait qu'il n'existe pas de petiote requete toute simple ?
      (j'avais essayé de combiner les 2 left join sur chacun des champs union les 2 right join ... mais c'est trop complexe !!)
      0
    2. Modérateur
      bha non c'est tout dans le not in.

      genre si t'as une table voiture_deluxe avec un champs ID_MARQUE
      et une table voiture_pourrie avec un champs ID_MARQUE

      si tu veux les marques des voitures_deluxe qui sont pas dans voiture_pourrie ça donne :

      select a.ID_MARQUE from voiture_deluxe a where a.ID_MARQUE not in (select b.ID_MARQUE voiture_pourrie b);

      en gros tu regarde les a.ID_MARQUE qui sont pas dans le résultats du select de la table voiture_pourrie.
      0
    3. pas vraiment Malekal :
      Si on suppose que l'ID_Marque, c'est le champs 2 dans mon exemple
      avec ta methode, je ne remonterai pas les lignes ou ID_Marque = 3
      Parce que j'aurai un 3 dans chaque table ... mais ils ne correpondront pas à la même voiture
      0
    4. Modérateur
      ha ok, j'avais pas compris, désolé :)
      0
    5. pas de blem ... je ne pensais pas non plus que le problème serait si dur.
      0
  2. Et pis, avec Oracle, il y a aussi cette possibilité http://www.dba-oracle.com/t_sql_subtract_result_sets.htm Sais pas pour les autres bases de données.
    1
    1. Je ne suis pas encore assez bon pour piger la réponse qui a pourtant l'air simplissime :/
      sid_abs est une donnée cachée sur la table ou la requête ?
      0
    2. Euh, je ne pige pas moi non plus. Lol. J'avais donné le lien à cause de s simplicité et car je connais le gars (il a d'autres manières de faire moins absconses XD)

      Mais, de toute manière, il me semble (à tester) que le SUBTRACT (ou MINUS) devrait marcher si tu fais un SELECT sur plusieurs colonnes (à savoir, toutes les colonnes de ta table).

      On arriverait donc à

      SELECT col1, col2, col3
      FROM t1
      MINUS
      SELECT col1, col2, col3
      FROM t2
      union
      SELECT col1, col2, col3
      FROM t2
      MINUS
      SELECT col1, col2, col3
      FROM t1

      Hum. A tester
      0
    3. c'est testé et ça marche ^^
      0
    4. Mdrr. Lol. Donc mon beau 1er lien théorique (que je n'ai même pas lu, mais bon, j'ai pris quand même le soin d'admirer les tophos) est inutile ?

      Snifeu.
      0
    5. Encore plus mdr, encore plus lol :
      Non, c'est que la réponse avec les minus que tu viens de donner, c'est celle qu'il y a dans ton bea 1er lien théorique (ce qui nous permet de comprendre que, en effet, tu ne l'as pas lu)
      0
  3. Ben il y a SUBTRACT mais c'est pour avoir les différences sur les PK... Si tu te contenterais de voir les différences au niveau de la PK, une union de 2 subtract ferait l'affaire. MAis comme t'es gourmand, ça se paie :)

    ++
    0
    1. C'est quoi les PK ?

      Et SUBTRACT, c'est pas plutot MINUS ?
      Parce que la solution proposée dans le lien que tu m'a passée est en effet une union de deux minus.

      Bon ... ils ralent parce qu'elle est couteuse en temps mais je crois que c'est quand même celle que je vais prendre pour l'intant
      0
    2. PK = primary key. M'enfin, pas vraiment nécessaire, un simple index suffit.
      0