Jump to content

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


Recommended Posts

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:

Link to comment
Share on other 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)

Link to comment
Share on other 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.

Link to comment
Share on other sites

  • 2 weeks later...

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

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

  • 2 weeks later...

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

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...