Sélectionner les lignes différentes entre deux tables

Mikemadest Messages postés 2 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 31 mars 2005 - 23 juin 2003 à 16:49
Mikemadest Messages postés 2 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 31 mars 2005 - 31 mars 2005 à 15:08
Bonjour,

J'ai cherché sans trouver de réponse à mon problème,
ce qui m'amène à vous poser cette question !
D'avance je m'excuse si j'ai raté la solution quelque part...

Pour commencer:
je developpe en php/MySQL.
J'ai deux tables qui contiennent des données sur des articles (référence, taille, etc.).

- la première table contient les anciennes données.
- la deuxième contient les nouvelles.

Je veux créer une requête qui va prendre les données qui diffèrent entre les deux tables.
Le but est de sélectionner les articles qui ne seront plus dans la nouvelle table.

Au début j'ai cherché à faire un :
SELECT ancienne.* FROM nouvelle, ancienne WHERE nouvelle.id<>ancienne.id

Et puis j'ai réfléchit :
il me faut toutes les références de la vielle table qui ne sont pas dans la nouvelle.

J'ai cherché, et finalement j'ai opté pour cette solution:
il suffit de supprimer les références de l'ancienne table qui sont présentes dans la nouvelle.
Ainsi les références qui restent correspondent à ce que je cherche !

Après encore moultes recherches, j'ai fini par avoir ceci:
DELETE FROM ancienne USING nouvelle,ancienne WHERE nouvelle.id=ancienne.id

Dans la doc MySQL, il y a une autre variation :
DELETE ancienne FROM nouvelle,ancienne WHERE nouvelle.id=ancienne.id

Mais ça ne marche pas !
Que ce soit le USING ou DELETE FROM avec deux tables,
il me renvoit toujours la même erreur:
"something is wrong in your syntax ..."
soit en indiquant le using, soit la virgule...

Hors normalement ça marche avec les version récentes de MySQL...
Peut-être que le fait d'utiliser easyphp 1.6 pose un problème ?

J'ai loupé un truc ?

Merci d'avance,
MikeMadest

PS:
je viens de voir que sur easyphp 1.6 c'est Mysql 3.23,
ce qui explique que ces requetes soient rejetée...
Y'a t'il une autre solution à mon problème ? :blush)

1 réponse

Mikemadest Messages postés 2 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 31 mars 2005
31 mars 2005 à 15:08
Bonjour,



Cela fait bien longtemps que j'ai posé cette question. Maintenant je
connais bien mieux le sql, et je connais la réponse... Alors comme je
retombe par hasard sur ma question, je vais y répondre !



Je ne sais pas si personne n'y a répondu parce qu'elle était simple...
ou si elle était passé inaperçu. Je pense que je n'avais pas trouvé
parce que j'avais mal posé mon problème, tout simplement (j'avais
pourtant bien cherché).



Je ne connaissais pas bien les requêtes jointes à l'époque, et c'est pourtant là que se trouve la solution à mon problème.



Soit deux tables, "nouvelle" et "ancienne". Partant des données de mon
problème, elles ont les même champs, et ce qui m'intéresse ce sont les
données de la nouvelle qui ne sont pas dans l'ancienne. Je prendrai
comme champ de liaison un hypothétique champ de référence "id" :



SELECT nouvelle.* FROM nouvelle LEFT JOIN ancienne ON nouvelle.id = ancienne.id

WHERE ancienne.id IS NULL



Je traduis cette requête en Français :

Sélectionner tous les champs de la table "nouvelle",

Utiliser la table ancienne qui est lié à nouvelle par l'égalité des champs "id"

Et ne prendre que les lignes de la table nouvelle correspondant à une ligne vide de la table ancienne.



Voilà :)

Je ne sais pas si cela servira à quelqu'un mais bon ...




MikeMadest
0
Rejoignez-nous