{SQL Server} mise a jour avec deux tables

Fermé
commandeurd - 17 déc. 2009 à 20:35
 fiu - 18 déc. 2009 à 20:04
Bonjour,

je voudrais mettre à jours mes fiches articles (prix achat) avec 2 tables
sur la dernier date entrée (sous-linux)

table1 = article
champ = nom, code , prix_achat

table2 = liste des entrees des article
champ = code , prix_achat, qte , date entree

table3 = liste des entrees des articles grossiste
champ = code , prix_achat, qte , date entree.

exemple :

table1
stylo , 123456 , 15€
piles , 123460 , 2€
radio , 123401 ,3€

table2
123456 , 13€ , 24 , 24/10/2009
123460 , 11€ , 4 , 23/10/2009
123456 , 11€ , 24 , 22/10/2009

table3
123456 , 14€ , 12 , 24/11/2009
123401 , 20€ , 24 , 20/10/2009



Resulta finale apres requette:

table1
stylo , 123456 , 14€
piles , 123460 , 11€
radio , 123401 ,20€


Pouvez-vous m'aide?Je vois pas trop comment faire avec 2 tables
Merci.
__________________
A voir également:

3 réponses

Salut

À moins de disposer de trigger dans ta base, tu dois passer 2 requêtes pour ta mise à jour : la première pour table2 ou table3 et la seconde pour table1.
0
oui , je c'est tres bien, mais je vois pas comment faire avec deux tables, en plus ou mettre max (date entree)
Merci de guide dans ma recheche
0
Salut,

Allons-y progressivement.
1. l'intégralité des entrées c'est
select code, prix_achat, date_entree from table2
union
select code, prix_achat, date_entree from table3

2. pour obtenir les dernière_date_entree par code, on parcourt l'intégralité des entrées en ne conservant que la date max.
select code, max(date_entree) derniere_date_entree
from (l'intégralité des entrées)
group by code

3. pour obtenir le dernier prix d'achat par code, on parcourt l'intégralité des entrées en ne gardant que les lignes où (code, date_entree) appartient à derniere_date_entree par code. Des lignes conservées, on récupère le prix :
select code, prix_achat
from (l'intégralité des entrées) t1
where (t1.code, t1.date_entree) in (derniere_date_entree par code)


maintenant, on remplace nos paraphrases par du sql valide
2=>
select code, max(date_entree) derniere_date_entree
from (select code, prix_achat, date_entree from table2
union
select code, prix_achat, date_entree from table3)
group by code

3=>
select code, prix_achat
from (select code, prix_achat, date_entree from table2
      union
      select code, prix_achat, date_entree from table3) t1
where (t1.code, t1.date_entree) in (
      select code, max(date_entree) derniere_date_entree
      from (select code, prix_achat, date_entree from table2
            union
            select code, prix_achat, date_entree from table3)
      group by code)

Voilà ! tu as maintenant un joli guide (code, dernier_prix_achat) avec lequel tu vas pouvoir mettre table1 à jour.
Je te laisse réviser la "Mise à jour d'une table depuis une autre table". La théorie voudrait que cette ultime mise à jour se fasse en se basant sur le guide ci-dessus. Mais comme ça a l'air très gourmand en mémoire, je suppose qu'il vaudra mieux stocker ce guide dans une table temporaire et faire ta mise à jour de table1 d'après cette table temporaire
0