Bonjour,
Je cherche les bovins :
- actifs (B_Actif = 1) ;
- femelle (B_SEXE = '2') ;
- qui ont une date de premier vêlage (B_DAT_PREM_VELAGE IS NOT NULL) ;
- et qui ne sont pas mère d'un autre bovin de la même table (c'est là que j'ai un doute dans les requêtes ci-dessous ).
La mère d'un bovin est donné par l'identifiant du bovin mère dans la colonne B_FK_IND_MERE.
J'ai d'abord fait une jointure externe gauche et cherché les NULL dans la deuxième instance de la table :
Résultat : 14 323 926 vaches !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT b1.B_IND_BOVIN, b1.B_NUM_NAT, b1.B_DAT_NAISS, b1.B_FK_COD_TEMOIN_NAISS, b1.B_DAT_PREM_VELAGE FROM bdni2.bovins b1 LEFT OUTER JOIN bdni2.bovins b2 ON b1.B_IND_BOVIN = b2.B_FK_IND_MERE WHERE b1.B_Actif = 1 AND b1.B_SEXE = '2' AND b1.B_DAT_PREM_VELAGE IS NOT NULL AND b2.B_IND_BOVIN IS NULL
Devant l'énormité de ce résultat, j'ai essayé avec la méthode NOT EXISTS :
Résultat : 14 323 926 vaches ! Idem.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT b1.B_IND_BOVIN, b1.B_NUM_NAT, b1.B_DAT_NAISS, b1.B_FK_COD_TEMOIN_NAISS, b1.B_DAT_PREM_VELAGE FROM bdni2.bovins b1 WHERE b1.B_Actif = 1 AND b1.B_SEXE = '2' AND b1.B_DAT_PREM_VELAGE IS NOT NULL AND NOT EXISTS ( SELECT * FROM bdni2.bovins b2 WHERE b1.B_IND_BOVIN = b2.B_FK_IND_MERE)
Avant d'annoncer ce résultat étonnant au thésard qui étudie les méthodes d'élevage bovin, je voudrais être sûr de ne pas avoir mal construit ma requête.
Merci de me donner votre avis sur ce sujet.
Partager