BriceGdT1
Messages postés6Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention31 août 2005
-
30 août 2005 à 09:36
BriceGdT1
Messages postés6Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention31 août 2005
-
31 août 2005 à 21:49
Bonjour,
J'ai une base de donnée avec deux tables A et B aux structures identiques. Je voudrais faire un requête qui me sorte les lignes de B différentes de celles de A.
Une requete de non correspondance me renvoi seulement les nouvelles lignes et pas toutes celles qui ont été modifiés.
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 30 août 2005 à 16:29
Salut,
Supposons que tu aies une table A (id, lib, actif) et B (id, lib, actif)
<li>pour afficher les champs de A qui différent de B alors :</li>
SELECT DISTINCT A.*
FROM A, B
WHERE A.id Not In (SELECT A.id FROM A, B WHERE A.lib= B.lib AND A.actif=B.actif);
<li>pour afficher les champs de B qui diffrent de A alors :</li>
SELECT DISTINCT B.*
FROM A, B
WHERE B.id Not In (SELECT B.id FROM A, B WHERE A.lib =B.lib AND A.actif= B.actif);
<li>pour afficher tous les champs qui différencient A et B </li>
SELECT DISTINCT A.*
FROM A, B
WHERE A.id Not In (SELECT A.id FROM A, B WHERE A.lib =B.lib AND A.actif= B.actif)
UNION (
SELECT DISTINCT B.*
FROM A, B
WHERE B.id Not In (SELECT B.id FROM A, B WHERE A.lib=B.lib AND A.actif=B.actif)
)
<li>pour afficher la liste complete des valeurs de A et de B (sans doublons) </li>
SELECT DISTINCT A.*
FROM A
UNION (
SELECT DISTINCT B.*
FROM B
)
Voilà, on doit pouvoir faire plus court ... mais tu as des solutions qui tournent ...
NB: faut que dans ta clause where tu testes l'égalitée d'un maximum de
champs ... je sais pas si tu veux une copies exacte de la base source,
à identifiant prés ... donc dans l'exemple, j'ai pas testé l'égalitée
des id ...