2013-05-26 13 views
0

Je voudrais fusionner un tableau indiquant que les données proviennent de 2 bases de données différentes. I exploité comme décrit ci-dessous:Insérer plusieurs lignes dans une table sans insérer de lignes dupliquées

1 - je l'ai fait une copie de la table de base de données source et je reçois la requête d'insertion suivante:

INSERT INTO `t_vaccination` VALUES  (242,NULL,NULL,53,1,'20030528','0','W5770-2',0,'DTP - REVAXIS','A 20130521170623','2013-05-21 17:06:23'), 
(243,NULL,NULL,53,1,'20130525','0','',1,'DTP - ','A 20130521170623','2013-05-21 17:06:23'), 
(1830,NULL,NULL,50,1,'20080502','3','',0,'DTP - REVAXIS','A 20130521170623','2013-05-21 17:06:23'), 
(1831,NULL,NULL,50,1,'20130501','4','',1,'DTP - ','A 20130521170623','2013-05-21 17:06:23'), 
(1832,NULL,NULL,50,1,'20080502','3','',0,'PAPILLOMAVIRUS - Gardasil','A 20130521170623','2013-05-21 17:06:23') 

la structure de la table t_vaccination est:

CREATE TABLE `t_vaccination` (
`nIdVaccination` INT(10) UNSIGNED NOT NULL, 
`nIdVaccin` INT(10) UNSIGNED NULL DEFAULT NULL, 
`nIdVacProtocole` INT(10) UNSIGNED NULL DEFAULT NULL, 
`nIdPatient` INT(10) UNSIGNED NOT NULL, 
`nIdUtilisateur` INT(10) UNSIGNED NULL DEFAULT NULL, 
`sDateInjection` VARCHAR(8) NOT NULL DEFAULT '', 
`nNumInjection` VARCHAR(45) NOT NULL DEFAULT '0', 
`sNumLot` VARCHAR(45) NOT NULL DEFAULT '', 
`nRappel` TINYINT(4) NOT NULL DEFAULT '0', 
`sLibelle` VARCHAR(255) NOT NULL DEFAULT '', 
`sAction` VARCHAR(16) NOT NULL DEFAULT 'A 20080101000000', 
`sDH_REPLIC` DATETIME NULL DEFAULT '2010-01-01 00:00:00', 
PRIMARY KEY (`nIdVaccination`), 
INDEX `NDX_t_vaccination_nIdUtilisateur` (`nIdUtilisateur`), 
INDEX `NDX_t_vaccination_nIdVaccin` (`nIdVaccin`), 
INDEX `NDX_t_vaccination_nIdVacProtocole` (`nIdVacProtocole`), 
INDEX `NDX_t_vaccination_nIdPatient` (`nIdPatient`), 
CONSTRAINT `FK_vaccination_nIdUtilisateur_utilisateur` FOREIGN KEY (`nIdUtilisateur`) REFERENCES `t_utilisateur` (`nIdUtilisateur`), 
CONSTRAINT `FK_vaccination_nIdVaccin_vaccin` FOREIGN KEY (`nIdVaccin`) REFERENCES `t_vaccin` (`nIdVaccin`) 
) 

2 - Je voudrais insérer toutes les lignes dans la table t_vaccination de la base de données finale sans insérer les lignes dupliquées. la nouvelle requête exécuter en insérant une ligne:

INSERT INTO t_vaccination (nIdVaccination, nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur, sDateInjection, nNumInjection, sNumLot, nRappel, sLibelle, sAction, sDH_REPLIC) 
SELECT 251,41,4,53,1,'20030528','0','W5770-2',0,'DTP - REVAXIS','A 20130521170623','2013-05-21 17:06:23' FROM t_vaccination WHERE NOT EXISTS (SELECT nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur FROM t_vaccination WHERE nIdVaccin = 41 and nIdVacProtocole = 4 and nIdPatient = 53 and nIdUtilisateur =1) LIMIT 1 

3 - Est-il possible d'insérer des lignes par groupe à l'aide d'insertion où existe non pas parce que les tentatives que je l'ai fait échoué. Voici un exemple d'une insertion qui a échoué:

INSERT INTO t_vaccination (nIdVaccination, nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur, sDateInjection, nNumInjection, sNumLot, nRappel, sLibelle, sAction, sDH_REPLIC) 
SELECT 251,41,4,53,1,'20030528','0','W5770-2',0,'DTP - REVAXIS','A 20130521170623','2013-05-21 17:06:23' FROM t_vaccination WHERE NOT EXISTS (SELECT nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur FROM t_vaccination WHERE nIdVaccin = 41 and nIdVacProtocole = 4 and nIdPatient = 53 and nIdUtilisateur =1) LIMIT 1, 
SELECT 243,NULL,NULL,53,1,'20130525','0','',1,'DTP - ','A 20130521170623','2013-05-21 17:06:23' FROM t_vaccination WHERE NOT EXISTS (SELECT nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur FROM t_vaccination WHERE nIdVaccin = NULL and nIdVacProtocole = NULL and nIdPatient = 53 and nIdUtilisateur =1) LIMIT 1 

J'espère pour votre aide.

Cordialement

Motti

+0

En réponse à votre question, c'est ce que je vous suggère en effet: insert toutes les sources sur une table temporaire et exécutez la requête mentionnée ci-dessus. – nfroidure

Répondre

0

À mon avis, la façon de faire plus simple ce que vous voulez est de supprimer des clés uniques/index et supprimer ou créer une dupes table temporaire sans les clés. Supposons que vous créez une table de temp_t_vaccination et d'importer toutes vos lignes, vous aurez alors simplement à faire:

INSERT INTO t_vaccination (field1, field2 ...) SELECT DISTINCT field1, fields2 ... FROM temp_vaccination 

ref: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html?ff=nopfpls

Questions connexes