Aller au contenu

Insérer des données qui n'existe pas déjà


Arcy

Messages recommandés

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.

:merci:

:inpactitude2:

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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)
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

J'ai complètement oublié de passer ce sujet en résolu :transpi:

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).

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...