Requête complexe : probable jointure externe

Requête complexe : probable jointure externe - SQL/NoSQL - Programmation

Marsh Posté le 24-06-2007 à 20:07:19    

Bonjour,
 
Je suis en stage et je suis bloqué sur une requête que je juge complexe.
 
Je travaille sur une base de données portant sur l'élevage de bovins.
Une commande est passé est passé et concerne un ou 2 taureaux. Je dois
 
rédiger une requête qui fourni le nom, le numéro de travail, le stock réservé,
 
le stock achat du taureau 1 et/ou du taureau 2.
 
Une dose est réservé et acheté par un élevage qui a passé la commande
 
Voici les tables (uniquement les données utiles)
 
Commande (
CDE_NUM -clé primaire-
ELV_NUCHEP -numéro de l'élevage = client
TAS_NUNATI_1 : N° du taureau 1 concerné par la commande
TAS_NUNATI_2 : N° du taureau 2 éventuellement concerné par la
 
commande)
 
Elevage
(ELV_NUCHEP -numéro de l'élevage = client
...
)
 
DoseAchatée
(ELV_NUCHEP -numéro de l'élevage = client
TAS_NUNATI : N° du taureau pour lequel l'achat de doses a été effectué
ACHAT_NBDOSE : Nb de doses achetés
...)
 
 
DoseReservée
(ELV_NUCHEP -numéro de l'élevage = client
TAS_NUNATI : N° du taureau pour lequel l'achat de doses a été effectué
ACHAT_NBDOSE : Nb de doses reservés
...)
 
Je suppose qu'il faut utiliser une jointure externe, mais j'ai du mal à
 
obtenir le résultat escompté.
 
Si vous pouviez m'aider à rédiger la requête, cela me serait très utile car je
 
ne peux pour le moment pas continuer mon travail
 
Merci

Reply

Marsh Posté le 24-06-2007 à 20:07:19   

Reply

Marsh Posté le 25-06-2007 à 09:43:10    

Oh putain, la modélisation de bovin [:cerveau heink]  
 
 
Hormis l'horreur qu'est le modèle de la base (je reviens de chez le véto, mon chien s'est étouffé en vomissant), je ferais une requête de ce genre :
 

Code :
  1. SELECT *
  2. FROM Commande c
  3. INNER JOIN elevage e ON e.ELV_NUCHEP = c.ELV_NUCHEP
  4. INNER JOIN DoseAchatée d1 ON d1.ELV_NUCHEP = c.ELV_NUCHEP AND d1.TAS_NUNATI = c.TAS_NUNATI_1
  5. INNER JOIN DoseReservée r1 ON r1.ELV_NUCHEP = c.ELV_NUCHEP AND r1.TAS_NUNATI = c.TAS_NUNATI_1
  6. LEFT OUTER JOIN DoseAchatée d2 ON d2.ELV_NUCHEP = c.ELV_NUCHEP AND d2.TAS_NUNATI = c.TAS_NUNATI_2
  7. LEFT OUTER JOIN DoseReservée r2 ON r2.ELV_NUCHEP = c.ELV_NUCHEP AND r2.TAS_NUNATI = c.TAS_NUNATI_2

Reply

Marsh Posté le 25-06-2007 à 09:57:25    

Le modèle de données est bizzare, car j'ai pas présenté le contexte. Il s'agit plus précisémment d'une base de données relatives aux inséminations bovines (lol !). J'ai simplifié le modèle, mais il y a de nombreuses règles de gestions particulières.
 
J'essaye ça, et je te dis le résultat.

Reply

Marsh Posté le 25-06-2007 à 10:10:08    

Ouais, nan mais ça change rien que ce soit un MCD pour de l'insémination bovine, les bijoux de la soeur du pape ou une simple gestion de commandes.
 
Identifiant "elevage" présent à la fois dans la table "commende" et les tables filles "dose" : redondance = abération
 
2 identifiants de bovins dans une entête de commande = modèle figé à 1 ou 2 bovins par commande, avec obligation de passer par une jointure externe : abération
 
Doses réservées et doses achetées = même information, même structure. 2 tables pour ça = 3° abération :o

Reply

Marsh Posté le 25-06-2007 à 10:56:00    

Nan, je suis désolé.
Il y a des nuances entre dose commandée et une dose reservée (une histoire de quotat). Et une dose est reliée à un élevage et non pas à une commande.
 
Pour le résultat, de la requête. La BD est pour le moment HS. Donc je peux pas te dire

Reply

Marsh Posté le 25-06-2007 à 11:04:21    

(en l'occurence, là ton liens c'est sur le numéro du taureau, qui est de facto lié à un élevage j'imagine :spamafote:)
 
et c'est pas parcequ'il y a des propriétés en plus ou en moins que ça peut pas être les mêmes tables. tu peux tout à fait ajouter une CIF en 0,n pour compléter les deux cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed