Bonjour,
Je voudrais inserer des lignes dans une table a condition qu'ils n'existe pas dans la table.
voici la structure de la table:
voici la requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 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`) )
Le champ nIdVaccination ne s’incrémente pas automatiquement et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 INSERT INTO t_vaccination (nIdVaccin, nIdVacProtocole, nIdPatient, nIdUtilisateur) SELECT 41,4,53,1 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
1 - à la première exécution il insère la ligne dans la table et met la valeur 0 pour le champ nIdVaccination
2 – à la deuxième exécution il n’insère pas la ligne puisqu’il y a déjà une ligne ou nIdVaccination a la valeur 0
Conclusion : la condition where not exists n’ai pas pris en compte dans la requete.
comment faire pour que l'insert ne se fait que si les les valeurs des champs nIdVaccin, nIdVacProtocole, nIdPatient et nIdUtilisateur n'existe pas dans la table.
Cordialement
Motti
Partager