Page 1 sur 1
comparer des id de deux champs
Posté : 28 janv. 2007, 22:57
par HD
bonsoir
y a t il une solution qui m'épargne 20 000 lignes de code pour :
récupérer les "id" (champs id) de "table1"
les comparer aux "id" (champs id) de "table 2"
me donner les id qui existent dans l'une des tables et non dans l'autre (on peut trouver par exemple id=25 dans table1 et non dans table2 ; ou id=13 dans table2 et non dans table1)
merci !!!
Posté : 29 janv. 2007, 01:13
par Truc
Avec une jointure "LEFT JOIN", "RIGHT JOIN"
Posté : 30 janv. 2007, 17:13
par HD
les jointures vont me donner les id communs, mais moi je veux justement ceux qui existent dans l'une et non dans l'autre

Posté : 30 janv. 2007, 17:16
par fred9999
en gros un genre de requete comme ça.
Select distinct id from table1 where id<>select id2 from table2;????
Posté : 30 janv. 2007, 18:10
par HD
en gros un genre de requete comme ça.
Select distinct id from table1 where id<>select id2 from table2;????
oula non je ne crois pas

Posté : 30 janv. 2007, 18:38
par jojolapine
requête de fred corrigée (pas testée):
Code : Tout sélectionner
SELECT id.table1,id.table2 FROM table1, table2 WHERE id.table1<>id.table2
Posté : 30 janv. 2007, 18:39
par zeus
Tu peut t'en sortir avec les jointures.
Je m'explique :
Une jointure externe (OUTER JOIN) utilise toutes les données des 2 tables, même s'il n'y a pas de correspondances entre les 2 tables (dans ton cas, si l'id de la table1 n'existe pas dans la table2 ou vice versa).
Le soucis avec cette jointure, c'est qu'elle te remonte aussi les lignes qui ont des correspondances dans l'autre table (table1.id = table2.id)
Pour les supprimer, il suffit de ne sélectionner que les ligne où table1.id ou table2.id est vide, ce qui signifie que pour telle ligne, il n'y a pas correspondance dans l'autre table.
La requête sera donc de cette forme :
Code : Tout sélectionner
SELECT
t1.id,
t2.id
FROM
table1 t1 OUTER JOIN table2 t2 ON t1.id = t2.id
WHERE
t1.id IS NULL
OR t2.id IS NULL
J'espère avoir été clair sur mes explications mais si tu veux plus de détails sur les jointures, regarde ce tuto :
http://sqlpro.developpez.com/cours/sqlaz/jointures/
Posté : 31 janv. 2007, 22:41
par HD
salut
j'ai bien compris ces explications sauf que je met les vrais noms et que j'execute le code :
$verif = "SELECT t1.ART_ID,t2.ART_ID FROM articles t1 OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID
WHERE t1.ART_ID IS NULL OR t2.ART_ID IS NULL";
ca me met l'erreur :
SELECT t1.ART_ID,t2.ART_ID FROM articles t1 OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID WHERE t1.ART_ID IS NULL OR t2.ART_ID IS NULL Erreur de syntaxe près de 'OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID WHERE t1.ART_' à la ligne 1

Posté : 01 févr. 2007, 11:27
par HD
la structure de ma BD :
tables :
et dans chacun on trouve un champs "ART_ID"
merci d'avance
Posté : 01 févr. 2007, 11:59
par Truc
En suivant le lien donné par zeus tu devrais rapidement voir ce qu'il manque.
Comment fonctionne "OUTER" ?
Posté : 01 févr. 2007, 12:08
par HD
Posté : 01 févr. 2007, 18:47
par HD
Ca n'affiche pas d'erreur mais ca n'a pas l'air de fonctionner
je ne vois pas autre solution à part LEFT

un coup de pouce serait le bienvenu

Posté : 01 févr. 2007, 22:31
par Truc
"Left" est bien le mot qu'il manquait.... après l'odre des tables est important par rapport au "LEFT" et "RIGHT"
Posté : 01 févr. 2007, 23:27
par HD
merci à tous pour votre aide !