J'ai une table avec des données de champ incomplètes dans chacune de ses lignes que je veux réparer.Mysql "safe" merge
Voici un ce que je veux dire:
mysql> CREATE TABLE test (
key INT
a CHAR(1),
b CHAR(1),
c CHAR(1),
);
mysql> CREATE TABLE test2 (
key INT
a CHAR(1),
b CHAR(1),
c CHAR(1),
);
mysql> INSERT INTO test (1,'','','');
mysql> INSERT INTO test (2,'X','','');
mysql> INSERT INTO test (3,'','Y','');
mysql> INSERT INTO test2 (2,'X','','Z');
mysql> INSERT INTO test2 (4,'X','Y','Z');
Je voudrais non-destructive « fusionner » les données test2 en test basé sur le champ « clé » de sorte que:
- si un champ en test a déjà une valeur non vide pour une clé donnée, elle est conservée.
- Si un champ en test a une valeur vide et que le champ correspondant dans test2 n'est pas vide, la valeur de test2 remplace le champ correspondant dans test pour une clé donnée.
- si les champs test et test2 sont non vides et diffèrent, ne faites rien.
Après les « fusion » Je voudrais les données de la table « test » pour ressembler:
(1,'','','');
(2,'X','','Z');
(3,'','Y','');
(4,'X','Y','Z');
Un peu comme remplissant les trous dans la table de test sans rien démolir.
Quelqu'un peut-il penser à un moyen de faire cela?
Wow, vous tous sont incroyables! Dans les 10 minutes, j'obtiens exactement la bonne réponse à un problème qui me tue depuis des jours! Merci beaucoup, WoLpH! Je l'apprécie vraiment vraiment! Paul – KellerPaul
De rien KellerPaul :) Aussi, si vous voulez simplement insérer sans fusionner mais que vous voulez ignorer les lignes existantes, vous pouvez utiliser 'INSERT IGNORE INTO' – Wolph