3 votes

Mise à jour d'un champ dans une table avec la valeur maximale dans une autre table, avec la clé étrangère.

Je voudrais mettre à jour un champ "mostRecentDate" dans une table avec la date maximale dans une autre table avec la même valeur clé. Le schéma simplifié de la table :

C(c_id, mostRecentDate) L(l_id, c_id, theDate)

L.c_id est une référence de clé étrangère à C.c_id.

Depuis

Select MAX(theDate)
FROM L
Group by L.c_id

Donne la date maximale pour chaque c_id, j'ai essayé de mettre à jour par l'intermédiaire de

UPDATE C
SET C.mostRecentDate= (SELECT Max(theDate)
FROM L
Where L.c_id = C.c_id
Group by L.c_id)

Mais cette requête ne fait rien (aucune erreur générée, aucune ligne mise à jour). J'utilise MS Access 2003.

4voto

HansUp Points 53234

Celui-ci fonctionne dans Access 2007. Je pense qu'il devrait également fonctionner en 2003.

UPDATE C
SET mostRecentDate = DMax("theDate", "L", "c_id = " & C.c_id);

Attention, si vous avez une valeur c_id dans C qui n'est pas présente dans L, mostRecentDate sera remplacé par Null pour cette ligne dans C. Si vous voulez empêcher cela, cela demandera plus de travail.

Cependant, je ne vois pas l'intérêt de stocker ces valeurs de date maximale dans la table C. Vous savez déjà que vous pouvez les récupérer dans la table L chaque fois que vous en avez besoin avec une requête GROUP BY de L.

3voto

Fixpoint Points 2497

Le regroupement par dans la sous-requête n'est pas nécessaire ici. Essayez ceci :

UPDATE C
SET C.mostRecentDate= (SELECT Max(theDate)
FROM L
Where L.c_id = C.c_id)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X