Arcy Posted June 4, 2014 Share Posted June 4, 2014 Bonsoir ! Voilà, je dispose actuellement de 2 bases de données (sur MySQL), avec chacune deux tables qui m'intéressent. La première (base de données) étant utilisé par un logiciel, il m'est donc plus simple de rajouter les infos dans une autre base. Le problème est le suivant : je souhaite ajouter les ID de la première table dans la seconde sans pour autant avoir des doublons : je veux donc seulement ajouter les clés qui n'existe pas dans la seconde table. Le problème est que je vois pas comment obtenir ça en requête ... J'avais pensé à un truc du genre : INSERT INTO stock ('ID') SELECT produits.ID FROM produits RIGHT JOIN stock ON produits.ID = stock.ID WHERE produits.ID <> stock.ID ORDER BY produits.ID, stock.ID Ce qui fait qu'à la première utilisation, la première colonne de la première table sera entièrement répliqué dans la seconde et, à chaque demande, uniquement les différences. Link to comment Share on other sites More sharing options...
Arcy Posted June 5, 2014 Author Share Posted June 5, 2014 Personne n'a une petite idée ? Link to comment Share on other sites More sharing options...
Nemasix Posted June 5, 2014 Share Posted June 5, 2014 Deux bases de données, je suis pas sur que tu puisses taper deux base de données simultanément en SQL non? C'est une question hein... Sinon pour ton script, j'aurais plus mis "WHERE stock.ID = NULL" vu qu'avec la liaison RIGHT JOIN, si il ne trouve pas de stock.ID identique au produit.ID, il affichera NULL dans sa colonne (mais bon ça marche quand même pour toi, vu que le produit.ID est différent du stock.ID) Link to comment Share on other sites More sharing options...
Arcy Posted June 5, 2014 Author Share Posted June 5, 2014 Alors j'ai justement travaillé sur ça tout à l'heure. On peut joindre deux bases ensemble en indiquant le nom avant la table. INSERT INTO stock ('ID') SELECT produits.ID FROM BASE1.produits RIGHT JOIN BASE2.stock ON BASE1.produits.ID = BASE2.stock.ID WHERE produits.ID <> stock.ID ORDER BY produits.ID, stock.ID J'ai peut-être trouvé un truc mais il faut que je sache si ma requête permet de rajouter que les différences. Link to comment Share on other sites More sharing options...
Nemasix Posted June 5, 2014 Share Posted June 5, 2014 Bah déjà tu peux faire le test du juste sélect qui va t'affiche ton résultat et vérifier qu'il est bon ou pas Link to comment Share on other sites More sharing options...
mozzie Posted June 14, 2014 Share Posted June 14, 2014 Salut, Si ton ID est une clé primaire, elle ne peut pas être dupliquée (ça lèvera une exception), donc tu peux choisir de toutes les ajouter et de catcher les exceptions. Sinon, tu peux select tous les ID de la première table, puis tous les ID de la seconde et de faire match pour savoir celle qui n'ont pas de doublon. J'ai du faire un script de merging de table, et je me souviens que c'était pas vraiment évidant :) Link to comment Share on other sites More sharing options...
Arcy Posted June 14, 2014 Author Share Posted June 14, 2014 Alors apparemment, faire un INSERT INTO (quand la clé n'est pas primaire mais juste unique) ne fait que rajouter les différences. Link to comment Share on other sites More sharing options...
mozzie Posted June 14, 2014 Share Posted June 14, 2014 intéressant ça, je vais tester (j'ai justement quelques petits travaux à finir sur le sujet). merci pour le retour. Link to comment Share on other sites More sharing options...
Arcy Posted June 14, 2014 Author Share Posted June 14, 2014 A ce moment là : ID (table source) : non-primaire et unique ID (cible) : non-primaire et non-unique Par contre j'avais mis des champs à NULL par défaut et je fais un INSERT des clés uniquement si elles ne sont pas dans la table cible, de mémoire. EDIT : je met ma requête ici, un instant ... INSERT INTO BASE2.tableCible (ID) ( SELECT BASE1.tableSource.ID FROM BASE1.tableSource LEFT JOIN BASE2.tableCible ON BASE1.tableSource.ID = BASE2.tableCible.IDWHERE BASE2.tableCible.ID IS NULL) Link to comment Share on other sites More sharing options...
NonMais Posted June 26, 2014 Share Posted June 26, 2014 yep suffit de mettre une unicité sur ton champ et lorsque tu feras un insert pour un enregistrement qui existe déjà, y aura une erreur mais ça mettra le reste. Tu auras des violations de contrainte qui empêcheront les doublons. Link to comment Share on other sites More sharing options...
Arcy Posted June 26, 2014 Author Share Posted June 26, 2014 J'ai complètement oublié de passer ce sujet en résolu Il se trouve qu'effectivement, seules les LIGNES manquantes sont rajoutées : si le contenu de deux lignes (donc l'ID est identique), les lignes ne sont pas mises à jour (mais ça c'est réglé pour moi). Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.