Requete INSERT if not exists
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:
Code:
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`)
) |
voici la requête:
Code:
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 |
Le champ nIdVaccination ne s’incrémente pas automatiquement et :
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