SQL différences entre 2 tables

Résolu/Fermé
Utilisateur anonyme - 26 août 2010 à 15:32
 Utilisateur anonyme - 27 août 2010 à 10:00
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 :-(

A voir également:

3 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 15:42
2
Utilisateur anonyme
26 août 2010 à 15:47
... 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
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 627
26 août 2010 à 15:53
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
Utilisateur anonyme
26 août 2010 à 16:00
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
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 627
26 août 2010 à 16:12
ha ok, j'avais pas compris, désolé :)
0
Utilisateur anonyme
26 août 2010 à 16:20
pas de blem ... je ne pensais pas non plus que le problème serait si dur.
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 15:52
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
Utilisateur anonyme
26 août 2010 à 16:04
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
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 16:46
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
Utilisateur anonyme
26 août 2010 à 17:41
c'est testé et ça marche ^^
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 17:48
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
Utilisateur anonyme
27 août 2010 à 10:00
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
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 15:50
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
Utilisateur anonyme
26 août 2010 à 15:55
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
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 16:01
PK = primary key. M'enfin, pas vraiment nécessaire, un simple index suffit.
0