Utilisez SELECT dans une requête UPDATE
Comment puis-je UPDATE
un champ d'une table avec le résultat d'une SELECT
requête dans Microsoft Access 2007.
Voici la Requête Select:
SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
FROM TAX, FUNCTIONS
WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))
GROUP BY FUNCTIONS.Func_ID;
Et voici la Requête de mise à Jour:
UPDATE FUNCTIONS
SET FUNCTIONS.Func_TaxRef = [Result of Select query]
source d'informationauteur mammadalius
Vous devez vous connecter pour publier un commentaire.
Bien, il semble que l'Accès ne peut pas faire des agrégats dans les requêtes de mise à JOUR. Mais il peut faire des agrégats dans les requêtes SELECT. Afin de créer une requête avec une définition comme:
Et l'enregistrer en tant que YourQuery. Maintenant, nous devons travailler autour d'un autre restriction d'Accès. Requêtes de mise à JOUR ne peut pas fonctionner sur des requêtes, mais ils peuvent fonctionner sur plusieurs tables. Nous allons donc faire de la requête dans une table avec une requête création de Table:
Il stocke le contenu de la vue dans une table appelée MinOfTax_Code. Maintenant, vous pouvez faire une requête de mise à JOUR:
Faire SQL dans Access est un peu exagéré, j'aurais l'air dans Sql Server Express Edition pour votre projet!
J'ai écrit au sujet de certains des les limites de sous-requêtes corrélées Access/JET SQL pendant un certain temps, et a noté la syntaxe pour rejoindre plusieurs tables pour les Mises à jour SQL. Basé sur des infos et des tests rapides, je ne crois pas qu'il y a moyen de faire ce que vous voulez avec Access/JET en une seule instruction SQL UPDATE. Si vous pouviez, la déclaration de lire quelque chose comme ceci:
Vous pouvez également Accéder à/JET, parfois, laissez-vous sortir avec l'enregistrement d'un sous-requête comme une requête distincte, puis en le rejoignant dans l'instruction de mise à JOUR, de façon plus traditionnelle. Ainsi, par exemple, si nous avons sauvé la sous-requête SELECT ci-dessus comme une requête distincte nommée FUNCTIONS_TAX, puis l'instruction de mise à JOUR serait:
Toutefois, cela ne fonctionne toujours pas.
Je pense que la seule façon que vous ferez de ce travail est de déplacer la sélection et l'agrégation de la minimum Tax_Code valeur out-of-band. Vous pouvez le faire avec une fonction VBA, ou plus facilement à l'aide de l'Accès en fonction DLookup. Enregistrer le GROUPE EN sous-requête ci-dessus à une requête distincte nommée FUNCTIONS_TAX et de réécrire l'instruction de mise à JOUR:
Noter que la fonction DLookup empêche cette requête d'être utilisé en dehors de l'Accès, par exemple via OLEDB JET. Aussi, la performance de cette approche peut être assez terrible en fonction du nombre de lignes que vous ciblez, comme la sous-requête est en cours d'exécution pour chacune des FONCTIONS de ligne (parce que, évidemment, il n'est plus en corrélation, qui est le point de l'ensemble pour que cela fonctionne).
Bonne chance!
J'ai eu un problème similaire. Je voulais trouver une chaîne de caractères dans une colonne et placer cette valeur dans une autre colonne de la même table. L'instruction select ci-dessous trouve le texte à l'intérieur des parenthèses.
Quand j'ai créé la requête dans Access, j'ai sélectionné tous les domaines. Sur la vue SQL de cette requête, j'ai remplacé le mytable.myfield pour le domaine que je voulais avoir la valeur de l'intérieur de la parens avec
J'ai couru une requête création de table. La table de requête a tous les champs ci-dessus, la substitution et se termine avec
INTO NameofNewTable FROM mytable
Fait ce travail? Non testé mais devrait obtenir le point à travers.
L'essentiel pour chaque ligne en FONCTIONS, le sous-requête détermine le minimum actuel code des impôts et des ensembles de FONCTIONS.Func_TaxRef à cette valeur. C'est en supposant que les FONCTIONS.Func_ID est une clé Primaire ou Unique.
Je voulais ajouter une réponse de plus qui utilise une fonction VBA, mais il ne obtenir le travail fait dans une instruction SQL. Cependant, il peut être lent.
Je sais que ce sujet est vieux, mais j'ai pensé que je pourrais ajouter quelque chose à cela.
Je ne pouvais pas faire une mise à Jour avec la requête Select de travail à l'aide de SQL dans microsoft Access 2010. J'ai utilisé Tomalak la suggestion de faire ce travail. J'ai eu une capture d'écran, mais je suis apparemment trop d'un newb sur ce site pour pouvoir poster.
J'ai été en mesure de le faire à l'aide de l'outil de Conception de Requêtes, mais comme j'était à la recherche d'une confirmation de succès de la requête de mise à jour, l'Accès n'a pas été en mesure de me montrer le SQL pour que cela se produise. Je n'ai pas pu faire ce travail avec SQL seul code.
J'ai créé et sauvé mon sélectionnez la requête comme une requête distincte. Dans la Requête de l'outil de Conception, j'ai ajouté de la table, je suis en train de mettre à jour la requête select j'avais enregistré (j'ai mis la clé unique dans la requête de sélection de sorte qu'il avait un lien entre eux). Tout comme Tomalak l'a suggéré, j'ai changé le Type de Requête de mise à Jour. J'ai ensuite eu à choisir les champs (et désigner la table) j'ai tenté de mettre à jour. Dans la "mise À Jour", j'ai tapé dans le nom des champs de la requête select, j'avais apporté.
Ce format a été un succès et mise à jour de la table d'origine.