J'ai essayé la requête suivante et celle-ci a généré une erreur Duplicate Key sur un index UNIQUE sur trois colonnes.
Cette requête récupère dans les données sources les pères des veaux inexistants dans la nouvelle table des bovins regroupant les bovins, les veaux, leurs mère et leur père quand on les connait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 INSERT INTO bdni2.bovins(B_NUM_NAT, B_SEXE, B_FK_IND_PAYS, B_FK_IND_RACE) SELECT DISTINCT v.NUM_NAT_PERE, '1', p.P_IND_PAYS, r.R_IND_RACE FROM bdni.veaux v LEFT JOIN bdni2.pays p ON v.COD_PAYS_PERE = p.P_COD_PAYS LEFT JOIN bdni2.races r ON v.TYP_RACE_PERE = r.R_TYP_RACE LEFT JOIN bdni2.bovins2 b2 ON v.COD_PAYS_PERE = b2.P_COD_PAYS AND v.NUM_NAT_PERE = b2.B_NUM_NAT AND v.TYP_RACE_PERE = b2.R_TYP_RACE WHERE p.P_IND_PAYS IS NOT NULL AND r.R_IND_RACE IS NOT NULL AND v.NUM_NAT_PERE IS NOT NULL AND v.NUM_NAT_PERE <> '' AND b2.B_IND_BOVIN IS NULL
Ce que je ne comprends pas, c'est qu'un SELECT DISTINCT puisse générer une erreur Duplicate key !
J'ai résolu le problème en faisant INSERT IGNORE INTO et j'ai 470 208 bovins qui se sont ajoutés aux 61 millions déjà existants mais j'aimerais comprendre pourquoi ça plante sans le IGNORE.
Si quelqu'un a une idée, ça pourrait m'aider plus tard car il est possible que j'ai d'autres requêtes du même type à faire.
Merci.
Partager