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.
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
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.

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.